以下代码片段提供了一个非常奇怪的输出。我期待一个溢出(Python 给出一个 MemoryError)
#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
循环,以便在循环体中不允许任何导致大小修改/重新分配的操作。