将 push_back() 与基于范围的 for 循环一起使用

Using push_back() with range based for loops

如果我的理解还没有达到标准,请原谅,我仍在学习 C++,并且我来自解释型语言 (R)。

我的问题是关于使用向量作为基于范围的 for 循环的索引容器,在以下示例中:

//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) ;
}

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

只要 b 包含 a 的有效索引,您的代码就完全没问题。

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

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

但是你没有这样做所以你没事。