使用push_back()和基于范围的for循环 请原谅我的理解还不够标准,我仍然在学习C++,我来自一种解释性语言(R)。

使用push_back()和基于范围的for循环 请原谅我的理解还不够标准,我仍然在学习C++,我来自一种解释性语言(R)。,c++,std,stdvector,C++,Std,Stdvector,我的问题是,在下面的示例中,如何将向量用作基于范围的循环的索引容器: //Declare std::vector<int> a{5,1,6,9} ; std::vector<int> b{0,3} ; //Reserve Memory a.reserve(100) ; //Loop & Modify for(int i : b){ a.push_back(a[i] + 400) ; } //声明 std::向量a{5,1,6,9}; st

我的问题是,在下面的示例中,如何将向量用作基于范围的
循环的索引容器:

//Declare 
std::vector<int> a{5,1,6,9} ;
std::vector<int> b{0,3} ;

//Reserve Memory
a.reserve(100) ;

//Loop & Modify
for(int i : b){
         a.push_back(a[i] + 400) ;
}
//声明
std::向量a{5,1,6,9};
std::向量b{0,3};
//保留存储器
a、 储备(100);
//循环和修改
对于(int i:b){
a、 推回(a[i]+400);
}

我的问题是,这会以某种方式导致未定义的行为吗?

只要
b
包含
a
的有效索引,您的代码就非常好

如果使用范围修改迭代的容器,则会出现问题,例如,这将是无效的:

for (auto e : a)
{
    a.push_back(...);
}

但是你没有这样做,所以你很好。

请在每篇文章中问一个问题。是的,这会导致错误,你可以查看
push.back(a[i]+400)
不是有效语法。
push.back(…)
无效。我想你的意思是a.向后推(…)
或b.向后推(…)。请反映您的实际代码。您不需要
temp
变量。