迭代std :: deque时出现奇怪的运行时错误

时间:2012-06-27 10:40:03

标签: c++ stl iterator runtime-error

考虑以下代码:

 1  typedef std::deque<int> mydeque_t;
 2  mydeque_t mydeque;
 3   
 4  mydeque_t::iterator start = mydeque.begin();
 5  
 6  for (int i = 0; i != 1000; ++i)
 7       mydeque.push_back(i);
 8  
 9  for (mydeque_t::iterator myint = start; myint != mydeque.end(); ++myint)
10     *myint += 1;

执行它时,我总是在第10行遇到运行时错误(实例:http://ideone.com/juQAA)。但是当我将第6行更改为for (int i = 0; i != 100; ++i)时,代码工作正常。

通过将start定义(第4行)移到第一个for循环后面,可以轻松修复代码,但在我的示例中,我需要它保持在它之前。然而,即便像这样,我认为它应该运行良好,任何人都可以解释为什么它没有?

1 个答案:

答案 0 :(得分:9)

调用push_back()后,所有迭代器都无效。来自deque::push_back()

  

将给定元素值追加到容器的末尾。   所有迭代器都无效。没有引用无效。

猜猜:代码可能适用于100而不是1000,因为deque的内部存储不必重新分配以容纳{{1}导致100迭代器保持有效的元素。