Следующий фрагмент кода обеспечивает очень странный вывод. Я ожидал, что переполнение (Python дает MemoryError)C++: push_back в std :: vector при повторении его
#include <iostream>
#include <vector>
int main()
{
std::vector<int> a{1,2,3};
for(auto const & item : a)
a.push_back(item);
for(auto const & item : a)
std::cout<<item<<',';
return 0;
}
Выход: 1,2,3,1,0,3,
Как интерпретировать этот результат?
Если вы делаете подобное в Python, это дает ошибку памяти.
>>> a = range(0,20)
>>> for i in a:
a.append(i)
Traceback (most recent call last):
File "<pyshell#3>", line 2, in <module>
a.append(i)
MemoryError
>>>
Этот вопрос пришел мне на ум, потому что вышеупомянутый способ написания кода считается связанным. И для связанного защитного контейнера не должно расти/сокращаться во время foreach type iteration
. Итак, это непрозрачная абстракция.
Есть ли способ обернуть этот цикл foreach
так, чтобы любая операция, вызывающая изменение размера/перераспределение, не допускается в тело цикла.
Я подозреваю, что это не определено поведение. –
@Gautam Jha Я думаю, что это немного несправедливо изменить/расширить ваш вопрос после того, как он был дан ответ ... – purpletentacle
Понял, что мое намерение было не очень ясно раньше, задав новый вопрос с похожими данными, не имеет смысла. – gjha