Использование push_back () с диапазоном для циклов - PullRequest
0 голосов
/ 27 мая 2020

Прошу извинить меня, если мое понимание еще не на должном уровне, я все еще изучаю 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) ;
}

Мой вопрос: может ли это каким-либо образом привести к неопределенному поведению?

1 Ответ

1 голос
/ 27 мая 2020

Пока b содержит допустимые индексы в a, ваш код в полном порядке.

Проблема может возникнуть, если вы измените контейнер, в котором выполняете итерацию, с диапазоном для, например, это было бы недействительным :

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

Но вы этого не делаете, значит, все в порядке.

...