Luk*_*sen 3 c++ iterator stl 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;
Run Code Online (Sandbox Code Playgroud)
在执行它时,我总是在第10行遇到运行时错误(实例:http://ideone.com/juQAA).但是,当我更改第6行for (int i = 0; i != 100; ++i)代码工作正常.
通过start在第一个for循环后面移动定义(第4行)可以很容易地修复代码,但在我的例子中,我需要它保持在它之前.然而,即使这样,我认为它应该运行良好,任何人都可以解释为什么它没有?
调用之后push_back(),所有迭代器都会失效.来自deque::push_back():
将给定元素值追加到容器的末尾. 所有迭代器都无效.没有引用无效.
猜测:代码可能正常工作,100而不是1000因为deque的内部存储不必重新分配以容纳100导致begin()迭代器保持有效的元素.
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |