Алгоритм sort

Found.

Found at position 3

Else

Else

Алгоритм search

Алгоритм for__each

Этот алгоритм позволяет выполнить некоторое действие над каждым элементом диапазона [fist, last).

Чтобы определить, какое именно действие должно быть выполнено, нужно написать соответствующую функцию с одним аргументом типа Т (Т — тип данных, содержащихся в контейнере).

Функция не имеет права модифицировать данные в контейнере, но может их использовать в своей работе.

Имя этой функции передается в качестве третьего аргумента алгоритма.

Например, в следующей программе for_each используется для перевода всех значений массива из дюймов в сантиметры и вывода их на экран.

void InchToCm (double inch) {

cout << (inch * =2.54) << ' ';

}

int main(){

double inches [ ] = {0.5, 1.0, 1.5, 2.0, 2.5};

for_each(inches, inches + 5, InchToCm);

return 0;

}

Некоторые алгоритмы оперируют одновременно двумя контейнерами.

Таков и алгоритм search, находящий первое вхождение в первую последовательность [first1, last1) второй последовательности [first2, last2).

Например:

int main() {

int arr[] = {11, 77, 33, 11, 22, 33, 11, 22, 55};

int pattern[] = { 11, 22, 33 };

int* ptr = search(arr, arr + 9, pattern, pattern + 3);

if (ptr == arr + 9)

cout << "Pattern not found" << endl;

cout << "Found at position " << (ptr - arr) << endl;

list<int> lst (arr, arr + 9);

1ist<int>::iterator ifound;

ifound = search(lst.begin(), lst.end(), pattern, pattern + 3);

if (ifound == lst.end())

cout << "Pattern not found" << endl;

cout << "Found." << endl;

return 0;

}

Результат выполнения программы:

Отметим, что список не поддерживает произвольного доступа к своим элементам и соответственно не допускает операций «+» и «-» с итераторами. Поэтому мы можем только зафиксировать факт вхождения последовательности pattern в контейнер lst.

Назначение алгоритма очевидно из его названия. Алгоритм можно применять только для тех контейнеров, которые обеспечивают произвольный доступ к элементам,

— этому требованию удовлетворяют массив, вектор и двусторонняя очередь, но не удовлетворяет список.

В связи с этим класс 1ist содержит метод sort(), решающий задачу сортировки.

Алгоритм sort имеет две сигнатуры:

tempiate<class RandomAccessIt> void sort(RandomAccessIt fist, RandomAccessIt last);

tempiate<class RandomAccessIt> void sort(RandomAccessIt fist, RandomAccessIt last, Compare comp);

Первая форма алгоритма обеспечивает сортировку элементов из диапазона [first,last), причем для упорядочения по умолчанию используется операция <, которая должна быть определена для типа Т.

Т — тип данных, содержащихся в контейнере.

Таким образом, сортировка по умолчанию — это сортировка по возрастанию значений. Например:

int main() {

double arr[6] = {2.2, 0.0, 4.4, 1.1, 3.3, 1.1};

vector<double> v1(arr, arr + 6);

sort (v1.begin(), v1.end());

print(v1);

return 0;

}

Результат выполнения программы:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: