次のコードを検討してください。
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)
コードに変更すると、正常に動作します。
このコードは、定義 (4 行目) を最初の for ループの後ろに移動することで簡単に修正できますstart
が、私の例では、その前に留まる必要があります。しかし、このようにしても問題なく動作するはずだと思いますが、なぜうまくいかないのか説明してもらえますか?