Алгоритм STL для Vector Add

Скажем, у меня есть два vector<int> s:

vector<int> foo{1, 2, 3};
vector<int> bar{10, 20, 30};

Теперь я хочу добавить на них вектор, чтобы результат был:

11
22
33

Есть ли алгоритм STL, который будет обрабатывать это, или мне нужно использовать цикл for:

for(auto i = 0; i < foo.size(); ++i){
    foo[i] += bar[i];
}

Бонусный вопрос, что делать, если я хотел сделать что-то более сложное, чем добавление, скажем, foo был vector<string> и bar по-прежнему был vector<int>. Я надеюсь, что если есть алгоритм STL, который я могу использовать, он также будет поддерживать lambdas?

Ответ 1

То, что вы хотите сделать, может быть достигнуто с помощью std::transform. В вашем случае:

std::transform(foo.begin(), foo.end(), bar.begin(), foo.begin(), std::plus<int>());

std::transform поддерживает также lambdas, поэтому вы можете выполнять более сложные операции между элементами vector.