3
考慮下面的代碼:奇怪的運行時錯誤當過的std :: deque的
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)
時,代碼正常工作。
通過在第一個for循環後面移動start
定義(第4行),可以很容易地修復代碼,但在我的示例中,我需要將它留在它之前。但即使這樣,我認爲它應該運行良好,任何人都可以向我解釋爲什麼它不?
如果你確實真的希望你的迭代器保持有效,你應該考慮使用其他容器更友好的迭代器語義。在這方面,'std :: list'或多或少是替代'std :: deque'的替代品。 – Rook