【发布时间】: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_each、transform、for (auto& elem : coll) 等。
但是,我找不到一种优雅的方式来完成如上所示的工作。
有什么建议吗?
【问题讨论】:
-
你在那里所做的可以重写为
zip,直到两个集合中最短的一个结束,然后你可以在每个结果元组上执行添加。ZipShortest(coll_1, coll_2).ForEach(tup => tup.First.Add(tup.Second))在伪 C# 中。不知道在 C++ 中可以提供什么以及需要做多少工作。