- •Алгоритмы немодифицирующие последовательность Операции с каждым элементом (For each)
- •Поиск (Find)
- •Найти повторение (Аdjacent find)
- •Подсчет (Count)
- •Сравнение на равенство (Equal)
- •Отличие (Mismatch)
- •Поиск подпоследовательности (Search)
- •Алгоритмы модифицирующие последовательность Копировать (Copy)
- •Обменять (Swap)
- •Преобразовать (Transform)
- •Заменить (Replace)
- •Заполнить (Fill)
- •Породить (Generate)
- •Удалить (Remove)
- •Разделить (Partitions)
- •Убрать повторы (Unique)
- •Расположить в обратном порядке (Reverse)
Заменить (Replace)
template <class ForwardIterator, class T>
void replace(ForwardIterator first, ForwardIterator last, const T& old_value,
const T& new_value);
template <class ForwardIterator, class Predicate, class T>
void replace_if(ForwardIterator first, ForwardIterator last, Predicate pred,
const T& new_value);
replace– заменяет все элементы последовательности равныеold_value(для сравнения используетсяoperator==) или удовлетворяющие предикатуpred, новым значениеnew_value.
template <class InputIterator, class OutputIterator, class T>
OutputIterator replace_copy(InputIterator first, InputIterator last,
OutputIterator result, const T& old_value, const T& new_value);
template <class Iterator, class OutputIterator, class Predicate, class T>
OutputIterator replace_copy_if(Iterator first, Iterator last,
OutputIterator result, Predicate pred, const T& new_value);
replace_copy – выполняет действия аналогичные replace за исключение, того, что результат помещается в последовательность, начало которой задано итератором result.
Пример, следующий код заменяет все четные числа в последовательности на 3 и результат выводит в другую последовательность.
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
class isEven
{
public:
isEven() {};
bool operator() (int arg)
{
return (arg % 2) == 0;
}
};
int main()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
v1.push_back(6);
v1.push_back(7);
v1.push_back(8);
v1.push_back(9);
v1.push_back(10);
replace_copy_if(v1.begin(),v1.end(),
ostream_iterator<int>(cout,"\n"),isEven(),3);
return 0;
}
Заполнить (Fill)
template <class ForwardIterator, class T>
void fill(ForwardIterator first, ForwardIterator last, const T& value);
template <class OutputIterator, class Size, class T>
void fill_n(Output Iterator first, Size n, const T& value);
fill– присваивает значениеvalueвсем элементам последовательности [first;last)
fill_n– присваивает значениеvalueвсем элементам последовательности, начало, которой задано итераторовfirst, предполагается, что последовательность содержит по крайне мереnэлементов.
Породить (Generate)
template <class ForwardIterator, class Generator>
void generate(ForwardIterator first, ForwardIterator last,
Generator gen);
template <class OutputIterator, class Size, class Generator>
void generate_n(OutputIterator first, Size n, Generator gen);
generate– выполняет действия полностью аналогичный алгоритмуfill, за исключением того, что последовательность заполняется не определенным значением, а результатом вызова функции (или функционального объекта)gen.
Пример заполнения вектора случайными значениями:
#include <algorithm>
#include <vector>
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
vector<int> v1(10);
generate(v1.begin(),v1.end(),rand); // rand – стандартная функция
// генерации случайного числа
copy(v1.begin(),v1.end(),ostream_iterator<int>(cout,"\n"));
return 0;
}
Следующий пример показывает, как можно с помощью алгоритма generate_nвывести на стандартный вывод заданное количество случайных чисел:
#include <algorithm>
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
generate_n(ostream_iterator<int>(cout,"\n"),10,rand);
return 0;
}