Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
STL5 / lab6-algorithms / lab6-algorithms.doc
Скачиваний:
8
Добавлен:
10.04.2015
Размер:
203.26 Кб
Скачать

Заменить (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;

}

Соседние файлы в папке lab6-algorithms