Если у вас все в порядке с созданием другого вектора, вы можете сделать это:
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
int main() {
std::vector<int> a{1,2,3,4};
std::vector<int> b{1,2,3,4};
std::vector<int> c(a.size());
std::vector<int> v(a.size());
std::iota(v.begin(), v.end(),0);
std::transform(v.begin(),
v.end(),
c.begin(),
[&](const auto &i){
return a[i] + b[i];
});
for (const auto& e : c) std::cout << e << ' ';
return 0;
}
Вы можете превратить лямбду во что-то более общее c, например, функтор, который работает с переменным c число векторы и добавляет их элементы.
Однако я бы предпочел l oop. Основным преимуществом алгоритмов является ясность, но если вам нужно прибегнуть к обходному пути, ясность теряется. Может быть, кто-то может доказать, что я неправ, и найти алгоритм, который может делать то, что вы хотите, из коробки;).
PS: на секунду подумал, что вышеупомянутое действительно глупо и злоупотребление алгоритмом. С помощью std::iota
любой l oop может быть тривиально преобразован в использование алгоритма, но истинное значение std::transform
«преобразовать один диапазон в другой» полностью теряется, что противоречит цели использования алгоритма в первом место.