std::bind2nd
- старая функция привязки значения ко второму параметру функции. Он был заменен на std::bind
и lambdas.
std::bind2nd
возвращает вызываемый объект, который принимает один параметр, и вызывает завернутый вызов с этим параметром в качестве его первого параметра, а связанный параметр в качестве второго параметра:
int foo(int a, int b)
{
std::cout << a << ' ' << b;
}
int main()
{
auto bound = std::bind2nd(foo, 42);
bound(10); // prints "10 42"
}
std::bind2nd
(и его партнер std::bind1st
) устарели в C ++ 11 и удалены на C ++ 17. Они были заменены на C ++ 11 более гибкими std::bind
, а также лямбда-выражениями:
int foo(int a, int b)
{
std::cout << a << ' ' << b;
}
int main()
{
auto bound = std::bind(foo, std::placeholders::_1, 42);
bound(10); // prints "10 42", just like the std::bind2nd example above
auto lambda = [](int a) { foo(a, 42); };
lambda(10); // prints "10 42", same as the other examples
}
std::transform
вызывает вызов для каждого элемента диапазона и сохраняет результат вызова в выходной диапазон.
int doubleIt(int i)
{
return i * 2;
}
int main()
{
int numbers[] = { 1, 2, 3 };
int doubled[3];
std::transform(numbers, numbers + 3, doubled, doubleIt);
// doubled now contains { 2, 4, 6 }
}