Загрузка...

Функции и предикаты.


В стандартных библиотеках содержатся алгоритмы для выполнения опе¬раций над данными размещающимися в контейнерах. К таким алгоритмам относятся accumulate и for_each, предназначенные для работы с элементами данных. К примеру для вектора с элементами типа double vector<double>v double следующая функция умножает число типа double на 5:
void Afunction (double &k) { k*=5; }
Для того, чтобы эта функция выполнялась над содержимым вектора, ее необходимо передать оператору for_each: for_each(vdouble.begin(), vdou¬ble.end(), Afunction () );
Предикаты – это разновидность функций, которые возвращают истинное или ложное значение типа bool или int.
Где bool опис-ся как enum bool {false, true};
Пример предиката Is_Minus, кот-й возвращает истину, если переданное ему по ссылке целое число < 0:
bool Is_Minus (const int &ru) {return ru<0};
Затем можно определить вектор типа int и присвоить целые значения, воспользовавшись индексными значениями.
vector <int> vint (5);
vint[0]=4;
vint[1]=18;
vint[2]= -9;
vint[3]=100;
Для поиска в этом векторе 1-го отрицательного значения можно вызвать функцию find_if, передав по имени функцию предикат.
vector <int> :: iterator, j=
find_if(vint.begin(), vintend(), is_Minus);
if(j==vint.end())
cout <<” No negative values found” << endl;
else cout << “Result of find == ”<< *j <<endl;
Алгоритм find_if примен. функцию – предикат Is_Minus к каждому элементу в указанном диапазоне.

Загрузка...