АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Подсчет

Читайте также:
  1. Какой из видов доходов не учитывается при подсчете ВНП?
  2. ПОДСЧЕТ БАЛЛОВ
  3. ПОДСЧЕТ БАЛЛОВ
  4. Подсчет лейкоцитов с составлением лейкоцитарной формулы.
  5. Подсчет объемов арматурных работ
  6. Результаты подсчетов по каждому методу должны быть одинаковы.
  7. Строгий учет погрешностей арифметических действий и вычисление значений функции. Правила подсчеты верных цифр.

Одной из главных операций, применяющихся к последовательностям, является подсчет их элементов. Для этого используются функции count() или count_if(). Их общий вид приведен ниже.

 

I

template <class InIter, class T>

prtdiff_t count (InIter start, InIter end, const T &val);

template <class InIter, class UnPred> prtdiff_t count (InIter start, InIter end, UnPred pfn);

Тип prtdiff_t является разновидностью типа int. Алгоритм count() возвращает количество элементов последовательности, имеющих значение val, начиная с позиции, заданной итератором start, и заканчивая полицией, заданной итератором end. Алгоритм count_if() возвращает количество элементов последовательности, удовлетворяющих предикату pfn, начиная с позиции, заданной итератором start, и заканчивая позицией, заданной итератором end.

Следующая программа демонстрирует применение алгоритма count()

// Демонстрация алгоритма count().

#include <iostream>

#include <vector>

#include <cstdlib>

#include <algorithm>

using namespace std;

int main() {

system("chcp 1251");

vector<bool> v;

unsigned int i;

for(i=0; i < 10; i++) {

if(rand() % 2) v.push_back(true);

else v.push_back(false);

}

cout << "Последовательность:\n";

for(i=0; i<v.size(); i++)

cout << boolalpha <<v[i]<< " "; // boolalpha - флаг

cout << endl;

i = count (v.begin(), v.end(), true);//коичество элементов

cout << "Предикату соответствуют " << i << " элемента.\n";

cout<<endl;

system("pause");

return 0;

}

 

Эта программа выводит на экран следующие результаты.

 

 

Сначала программа создает вектор, содержащий случайно сгенерированные значения true и false. Затем для подсчета значений true применяется функция count().

Следующая программа иллюстрирует работу функции count_if(). вектор, содержащий числа от 1 до 19. Затем она подсчитывает элементы, кратные 3, Для этого создается унарный предикат dividesBy3 (), возвращающий значения true, если его аргумент кратен 3.

 

// Демонстрация алгоритма count_if().

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

/*Унарный предикат, определяющий, делится ли число на 3. */

bool dividesBy3(int i){

if((i%3) == 0) return true;

return false;

}

int main(){

system("chcp 1251");

vector<int> v;

unsigned int i;

for(i=1; i < 20; i++) v.push_back(i);

cout<< "Последовательность:\n";

for(i=0; i<v.size(); i++)

cout << v[i] << " ";

cout << endl;

i= count_if (v.begin (), v.end(), dividesBy3);

cout << "Количество чисел, кратных 3, =" << i << ".\n";

cout<<endl;

system("pause");

return 0;

}

 

 

Результаты работы программы приведены ниже.

 

 

Обратите внимание на то, как закодирован унарный предикат divideBy3 (). Аргументами всех унарных предикатов являются объекты, хранящиеся в соответствующем контейнере. Предикат должен возвращать значение true или false.

 

 

Удаление и замена элементов

 

Иногда необходимо создать новую последовательность, содержащую лишь часть элементов исходной последовательности. Для этого можно применять шаблон алго- remove_copy(). Его спецификация приведена ниже.

 

template <class InIter, class OutIter, class T>


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.)