我想知道在c ++ 11语法中是否有可能为多个项目使用基于for for循环的新容器,例如:
std::vector<double> x;
std::vector<double> y;
for (double& xp, yp : x, y)
{
std::cout << xp << yp << std::endl;
}
我无法找到有关将此循环用于多个容器的任何信息。我将非常感谢你的帮助。
经典for循环中的示例效果:
std::vector<double>::iterator itX = m_x.begin();
std::vector<double>::iterator itY = m_y.begin();
for (uint32_t i = 0; i < m_x.size(); i++, itX++, itY++)
{
// operations on the m_x and m_y vectors
}
答案 0 :(得分:5)
语言工作组中有一个请求支持非常相似的语法,可以在许多容器上同时进行迭代:
部分:6.5.4 [stmt.ranged] 状态:打开提交者:Gabriel Dos Reis
已开启:2013-01-12 上次修改:2015-05-22
<强>讨论强>:
新式'for'语法允许我们在迭代单个序列时省去管理迭代器声明。然而,当同时迭代两个或更多个序列时,负担和噪声仍然存在。我们应该扩展语法以允许它。例如。一个应该能写:
for (auto& x : v; auto& y : w) a = combine(v, w, a);
而不是吵闹的
auto p1 = v.begin(); auto q1 = v.end(); auto p2 = w.begin(); auto q2 = w.end(); while (p1 < q1 and p2 < q2) { a = combine(*p1, *p2, a); ++p1; ++p2; }
请参阅http://cplusplus.github.io/EWG/ewg-active.html#43
所以它可能发生但不会在不久的将来发生。
同时,最佳选择可能是经典的for循环。
答案 1 :(得分:2)
我知道现在有点老了,但我有一个类似的查询和TC的“你需要一些图书馆的帮助”评论让我笑了,因为我最后解决了类似的问题只有几个额外的字符。为了回收OP的第一个例子,并假设向量保证相同的大小,你可以使C ++ 11引用符合老式指针算术,如下所示:
<div class="channels-container">
<ul>
<a href="/category/funny">
<li>Funny</li>
</a>
<a href="/category/gaming">
<li>Gaming</li>
</a>
<a href="/category/gifs">
<li>GIFs</li>
</a>
<a href="/category/movies">
<li>Movies</li>
</a>
<a href="/category/music">
<li>Music</li>
</a>
<a href="/category/news">
<li>News</li>
</a>
<a href="/category/pics">
<li>Pics</li>
</a>
<a href="/category/politics">
<li>Politics</li>
</a>
<a href="/category/random">
<li>Random</li>
</a>
<a href="/category/science">
<li>Science</li>
</a>
<a href="/category/sports">
<li>Sports</li>
</a>
<a href="/category/style">
<li>Style</li>
</a>
<a href="/category=/technology">
<li>Technology</li>
</a>
<a href="/category/videos">
<li>Videos</li>
</a>
</ul>
</div>
可能最好不要在生产代码中使用(我是一个自学成才的爱好者编码器,所以 meh )但是它运行得很好,很简单,不需要库而且似乎没有受到任何影响显着的速度惩罚(至少,我注意到了)。它甚至适用于最小的C ++ 11环境(例如VC11)。为了清楚起见,我在稍微不同的上下文中使用了它,其中(给出上面的例子)我只在实际需要改变时才访问y []因此噪声中的任何可能的减速都会减少,但是因为y [在与x []相同的索引处需要访问,并且不需要额外的变量/迭代器,它完全适合该法案。
另外,对于manlio的答案+1;你会相信我在寻找替代方案之前,是否真的试图直观地使用完全这种语法? :o