【问题标题】:Updating all elements in a C++ vector更新 C++ 向量中的所有元素
【发布时间】:2013-06-27 06:18:02
【问题描述】:

我有一个结构向量 - 说结构类似于:

struct foo {
  int bar1;
  int bar2;
}

现在我想更新向量的每个元素,更新是 bar1 乘以 2。

执行此操作的简单方法是遍历向量的每个元素,但是否有更好的方法来执行此操作,例如使用带有 c++11 lambda 函数的库函数?

【问题讨论】:

    标签: c++ c++11 vector stl lambda


    【解决方案1】:

    您可以为此使用std::for_each

    #include <algorithm>
    #include <vector>
    ...
    std::vector<foo> v;
    ....
    std::for_each(v.begin(), v.end(), [](foo& f) { f.bar1 *=2; });
    

    它是否比普通循环更清晰/更简单是另一回事。在这种简单的情况下,基于范围的普通循环可能是更好的选择:

    for (auto& f : v) f.bar1 *= 2;
    

    【讨论】:

    • +1 表示 range-for 循环几乎消除了 std::for_each 的使用,我能理解的唯一用途是使用 std::bind 将其传递给其他函数和那将是一团糟。
    【解决方案2】:
    #include <algorithm> // for std::for_each
    #include <vector>
    
    void update_foos(std::vector<foo>& foos)
    {
       // Range-based for
       for(auto& foo : foos)
       {
         foo.bar1 *= 2;
       }
       // std::for_each+lambda
       std::for_each(std::begin(foos), std::end(foos), [](foo& f) { f.bar1 *=2; });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      相关资源
      最近更新 更多