是否可以重写这个原始循环:
vector<double> v { ... };
for (size_t i = 1; i<v.size(); ++i) {
v[i]*=v[i-1];
}
或者更神秘的:
for (auto i = v.begin()+1; i<v.end(); ++i) {
(*i) *= *(i-1);
}
(和类似的,也许也可以访问 v[i-2], ...)以更 STLish 的方式?
是否有其他形式与上述形式相同或更好(无论是风格还是性能)?
最佳答案
我能想象到的最STLish方式:
std::partial_sum(std::begin(v), std::end(v),
std::begin(v), std::multiplies<double>());
例子:
#include <iostream>
#include <vector>
#include <iterator>
#include <numeric>
#include <functional>
int main()
{
std::vector<double> v{ 1.0, 2.0, 3.0, 4.0 };
std::partial_sum(std::begin(v), std::end(v),
std::begin(v), std::multiplies<double>());
std::copy(std::begin(v), std::end(v),
std::ostream_iterator<double>(std::cout, " "));
}
输出:
1 2 6 24
关于c++ - 在容器上的循环中同时访问更多元素的 STL 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25640469/