問題タブ [reverse-iterator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - reverse_iterator で最後の要素を消去する
最近、私が維持しているコードで次のことを見つけました。
reverse_iterator を使用して、ループ内のコンテナー (この場合は std::list) から最後の要素を削除しようとします。要点は、正しく動作するように見えますが、そうではありません (無効なイテレータが原因でメモリの破損が発生する場合があります)。なぜでしょうか? そうしないための制限や規則はありますか?
ありがとう。
PSソリューションの改善を防ぐために、私はすでにそれを書き直して機能させました。問題は、上記のコードが正しく機能しない理由です。
c++ - マップ/セットイテレータがデクリメント不可とはどういう意味ですか? map.rbegin()->first を機能させるには?
map_of_bit_to_parent のマップの最後の要素を取得しようとしています
しかし、割り当て自体が実行時エラー「 map/set iterator not decrementable 」を引き起こしました
そのような割り当てを行う方法は?
c++ - end() - 1 の代わりに rbegin() を使用するのはなぜですか?
end() - 1 ではなく rbegin() を使用する利点は、STL コンテナーにどのようなものがあるのか疑問に思っています。
たとえば、次のようなものを使用する理由は次のとおりです。
それよりも:
c++ - イテレータの型がreverse_iteratorかどうかをチェック
fncに引数として渡されたイテレータがreverse_iteratorかどうかを確認する方法はありますか? 使用できる反復子特性関数はありますか?
c++ - 順方向反復子と逆方向反復子を使用した C++ マップの消去
このようなテンプレート関数があります
ここで、型名として順方向イテレーターと逆方向イテレーターの両方を渡す必要があります。1 つは順方向イテレーターで、もう 1 つは逆方向イテレーターである 2 つの別個の呼び出し。これを行うにはどうすればよいですか?
c++ - iterator と pop_back を使用したループで特異な iterator エラーが発生しました
以下のコードを与える(名前が付けられているとしましょうdeque.cpp
)
でコンパイルするとg++ -std=c++11 -o deque deque.cpp
、うまく動作します。
-D_GLIBCXX_DEBUG
ただし、 (でコンパイルするとg++ -std=c++11 -o deque_debug deque.cpp -D_GLIBCXX_DEBUG
、以下のエラーが発生します。
2 番目のループ++it
が単一のイテレータから構築されているようです。++it
しかし、最初のループの後、イテレータは 2 を指しており、pop_back()
それを無効にするべきではないと思います。では、なぜエラーが発生するのでしょうか?
注: コードを次のように書き直すことができることはわかっています。
そして、エラーはなくなります。
しかし、エラーコードで正確に何が起こるか知りたいです。(逆イテレータが実際に期待するノードを指しているのではなく、その次のノードを指しているということですか?)
更新: @Barry の回答で質問が解決しました。関連する追加の質問をさせてください:コード
++it
無効化されたイテレータで操作する必要がある場所は、間違っていると予想されます。しかし、なぜコードがエラーを引き起こさないのでしょうか?