|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
ПодсчетОдной из главных операций, применяющихся к последовательностям, является подсчет их элементов. Для этого используются функции count() или count_if(). Их общий вид приведен ниже.
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> Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |