24
|
transform ( vecMultiplicand.begin (),
|
// диапазон множителей
|
25
|
26
|
vecMultiplicand.end
|
(),
|
// конец диапазона
|
27
|
vecMultiplier.begin
|
(),
|
// значения множителей
|
28
|
vecResult.begin
|
(),
|
// диапазон,
|
содержащий результат
|
29
|
[](int a, int b)
|
{return
|
a * b;
|
} ); // лямбда
|
30
|
|
|
|
|
|
cout « "The contents of the first vector are: " « endl;
for (size_t nlndexl = 0; nlndexl < vecMultiplicand.size ();
nlndexl)
cout « vecMultiplicand [nlndexl] « ' ';
cout « endl;
35
36 cout « "The contents of the second vector are: " « endl;
508 ЗАНЯТИЕ 22. Лямбда-выражения языка С++11
for (size_t nlndex2 = 0; nlndex2 < vecMultiplier.size (); ++nlndex5)
cout « vecMultiplier [nlndex2] « '
cout « endl « endl;
40
cout « "The result of the multiplication is: " « endl;
for (size_t nlndex = 0; nlndex < vecResult.size (); ++ nlndex)
43 cout « vecResult [nlndex] « ' ';
cout « endl;
return 0;
47: }
Результат
The contents of the first vector are:
0123456789
The contents of the second vector are:
100 101 102 103 104 105 106 107 108 109
The result of the multiplication is:
0 101 204 309 416 525 636 749 864 981
Анализ
Рассматриваемое лямбда-выражение используется в строке 29 как параметр для алго ритма s t d : : tr a n s f o r m (). Этот алгоритм принимает два диапазона и применяет преобра зование, содержащееся в бинарной функции. Возвращаемое значение бинарной функции сохраняется в выходном контейнере. Эта бинарная функция — лямбда-выражение, при нимающее два целых числа и возвращающее результат умножения как возвращаемое зна чение. Полученное возвращаемое значение сохраняется алгоритмом s t d : : t r a n s f o r m ()
векторе v e c R e s u lt . Вывод демонстрирует содержимое двух контейнеров и результат умножения их элементов.
Листинг 22.4 демонстрирует лямбда-эквивалент объекта функции класса Mul-t i p l y o из листинга 21.5.
Лямбда-выражение для бинарного предиката
Бинарная функция, возвращающая значение t r u e или f a l s e , позволяет принять реш е ние при вызове бинарного предиката. Эти предикаты применяются в алгоритмах сорти ровки, таких как s t d : : s o r t (), которые вызывают бинарный предикат для любых двух значений в контейнере, чтобы узнать, какой из них должен располагаться перед другим. Вот обобщенный синтаксис бинарного предиката:
[...](Туре1& paramlName, Туре2& param2Name) { // выражение, возвращающее логическое значение; }
Лямбда-выражение для бинарного предиката
|
509
|
В листинге 22.5 показано лямбда-выражение, используемое при сортировке.
ЛИСТИНГ 22.5. Лямбда-выражение как бинарный предикат алгоритма std::sort (), обеспечивающий независящую от регистра сортировку
Do'stlaringiz bilan baham: |