矢量加法的STL算法

Jon*_*Mee 10 c++ algorithm stl vector vectormath

说我有两个vector<int>s:

vector<int> foo{1, 2, 3};
vector<int> bar{10, 20, 30};
Run Code Online (Sandbox Code Playgroud)

现在我想对它们进行向量添加,结果将是:

11
22
33

是否存在可以处理此问题的STL算法,或者我是否需要使用for循环:

for(auto i = 0; i < foo.size(); ++i){
    foo[i] += bar[i];
}
Run Code Online (Sandbox Code Playgroud)

奖金问题,如果我想做一些比添加更复杂的事情,怎么说foo是一个vector<string>并且bar仍然是一个vector<int>.我希望,如果有一个我可以使用的STL算法,它还会支持lambdas吗?

mka*_*aes 20

你想做什么可以使用std::transform.在你的情况下:

std::transform(foo.begin(), foo.end(), bar.begin(), foo.begin(), std::plus<int>());
Run Code Online (Sandbox Code Playgroud)

std::transform确实支持lambdas,这样你就可以在vector元素之间进行更复杂的操作.

  • @Pouya可能,该标准没有规定编译器必须如何实现STL算法,因此将来他们可能会使用多个内核来实现这个或谁知道什么.这是使用STL算法比使用自己的循环更好的原因之一.但是现在,是的,它可能只是一个循环.无论如何,这是cplusplus.com的建议实现:http://www.cplusplus.com/reference/algorithm/transform/ (2认同)
  • 对于这种实际情况,矢量化器有可能发现循环并用矢量化版本替换它.并不是说这会改善你的N = 3的情况,但这对N = 3000有帮助. (2认同)