逆反復子を使用した要素の削除
STL コンテナを使用する場合、逆反復子を使用して要素を削除すると問題が発生する可能性があります。デフォルトでは、消去関数は逆反復子ではなく反復子を想定します。
この問題を解決するには、いくつかの方法があります。
1.基本反復子の取得:
標準では、逆反復子 (i) とそれに対応する基本反復子 (i.base()) の関係を &*(reverse_iterator(i)) == & として定義しています。 *(i - 1)。これは、 --() を i.base().
2 に適用することで基本反復子を取得できることを意味します。 C 11 固有のソリューション:
C 11 には、次の 2 つの追加オプションがあります:
コード例:
for (std::list<Cursor::Enum>::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i) { if (*i == pCursor) { // C++11 solution m_CursorStack.erase(std::next(i).base()); // Alternatively, for pre-C++11 or if desired: m_CursorStack.erase(--(i.base())); break; } }
これらのアプローチに従うことで、標準に準拠しながら、逆反復子を使用してリストから要素を効果的に消去できます。要件。
以上が逆反復子を使用して STL コンテナから要素を安全に消去するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。