c++ - 在容器上的循环中同时访问更多元素的 STL 方法

标签 c++ algorithm loops stl c++14

是否可以重写这个原始循环:

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 

Live demo link.

关于c++ - 在容器上的循环中同时访问更多元素的 STL 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25640469/

相关文章:

python - Python 3 中的密码算术难题通用解决方案

Ruby 在线程循环中休眠

algorithm - 井字棋牌算法

c++ - 调整窗口大小,使主要小部件具有特定大小

c++ - 从opencv中的像素数组创建矩阵

c++ - 函数返回值的自动类型推导

c++ - 如何快速检查(非平凡的)数字列表的等价性?

excel - 在给定 Range 对象的 VBA 中循环遍历两个相同长度的单元格范围

php - 在 foreach 循环中将多个项目添加到 PHP 数组 - 有更好的方法吗?

c++ - 是否有理由在此代码中的字符串文字上使用 const_cast ?