【问题标题】:How to iterate two vectors in one loop in C++11? [duplicate]如何在 C++11 的一个循环中迭代两个向量? [复制]
【发布时间】:2016-05-08 06:31:56
【问题描述】:
#include <vector>

using namespace std;

class A
{
public:
    A() = default;

    void Add(int n)
    {
        m_count += n;
    }

private:
    int m_count;
};

int main()
{
    vector<int> coll_1 = {1, 2, 3};
    vector<A> coll_2(3);

    // Is there a more elegant way to do the "for loop"?
    for (int i = 0; i < 3; ++i)
    {
        coll_2[i].Add(coll_1[i]);
    }

    return 0;
}

我知道有很多新方法(即 C++11 风格)来执行 for 循环,例如 for_eachtransformfor (auto&amp; elem : coll) 等。

但是,我找不到一种优雅的方式来完成如上所示的工作。

有什么建议吗?

【问题讨论】:

  • 你在那里所做的可以重写为zip,直到两个集合中最短的一个结束,然后你可以在每个结果元组上执行添加。 ZipShortest(coll_1, coll_2).ForEach(tup =&gt; tup.First.Add(tup.Second)) 在伪 C# 中。不知道在 C++ 中可以提供什么以及需要做多少工作。

标签: c++ c++11


【解决方案1】:

您想要通常称为“zip”的东西。正如您在这些答案中看到的那样,Boost 有一个实现:

【讨论】:

    猜你喜欢
    • 2020-02-20
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2012-11-19
    • 2013-10-19
    相关资源
    最近更新 更多