Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;11用于多个项目的容器循环_C++_C++11_For Loop - Fatal编程技术网

C++ c++;11用于多个项目的容器循环

C++ c++;11用于多个项目的容器循环,c++,c++11,for-loop,C++,C++11,For Loop,我想知道在c++11语法中是否可以对多个项目使用新的基于容器的for循环,例如: std::vector<double> x; std::vector<double> y; for (double& xp, yp : x, y) { std::cout << xp << yp << std::endl; } std::向量x; std::向量y; 适用于(双倍&xp,yp:x,y) { std::cout语言工作组

我想知道在c++11语法中是否可以对多个项目使用新的基于容器的for循环,例如:

std::vector<double> x;
std::vector<double> y;

for (double& xp, yp : x, y)
{
     std::cout << xp << yp << std::endl;
}
std::向量x;
std::向量y;
适用于(双倍&xp,yp:x,y)
{

std::cout语言工作组中有一个请求,要求支持一个非常相似的语法,以便在许多容器上同时迭代:

部分:6.5.4[stmt.范围]状态:打开提交者: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;
}
auto p1=v.begin();
自动q1=v.end();
自动p2=w.begin();
自动q2=w.end();
而(p1

所以这可能发生,但不是在不久的将来


同时,最好的选择可能是经典的for循环。

我知道这现在有点旧了,但我有一个类似的查询和T.C.“你需要一些库帮助”评论让我笑了,因为我最终解决了一个类似的问题,只增加了几个字符。要循环使用OP的第一个示例,并假设向量保证大小相同,可以让C++11引用满足老式的指针算法,如下所示:

std::vector<double> x;
std::vector<double> y;

for (double &xp:x)
{
   std::cout << xp << y[&xp-&x[0]] << std::endl;
}
std::向量x;
std::向量y;
用于(双倍&xp:x)
{

std::cout您希望这种语法是什么意思?笛卡尔积还是锁步迭代?如果容器的大小不一样会发生什么?这应该做什么还不清楚。按索引对项目?在这种情况下,如果向量的长度不同呢?或者在叉积上迭代呢?无论如何,不,不可能使用syntax你可以给出任何一种方式,但可能的情况取决于你想要什么。你能更详细地解释你的问题吗?是的,我假设容器大小相同。我想从每个容器rach步骤中获取一个项目。如果它们大小不同,就会出现分段错误。IIRC EWG对某种语法非常感兴趣允许在多个范围内同时迭代。但是当前语言中没有支持这一点;您需要一些库帮助。这没关系,在这种情况下,我将使用oldschool for loop
std::vector<double> x;
std::vector<double> y;

for (double &xp:x)
{
   std::cout << xp << y[&xp-&x[0]] << std::endl;
}