逆反復子を使用して STL コンテナから要素を安全に消去するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-23 05:00:09
オリジナル
394 人が閲覧しました

How to Safely Erase Elements from an STL Container Using a Reverse Iterator?

逆反復子を使用した要素の削除

STL コンテナを使用する場合、逆反復子を使用して要素を削除すると問題が発生する可能性があります。デフォルトでは、消去関数は逆反復子ではなく反復子を想定します。

この問題を解決するには、いくつかの方法があります。

1.基本反復子の取得:

標準では、逆反復子 (i) とそれに対応する基本反復子 (i.base()) の関係を &*(reverse_iterator(i)) == & として定義しています。 *(i - 1)。これは、 --() を i.base().

2 に適用することで基本反復子を取得できることを意味します。 C 11 固有のソリューション:

C 11 には、次の 2 つの追加オプションがあります:

  • std::next(i).base(): これは、次の要素に対応する基本反復子を返します。シーケンス。
  • std::advance(i, 1); i.base(): これは、逆反復子を 1 つ進め、現在の位置に対応する基本反復子を返します。

コード例:

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート