std::string イテレータを使用して文字列の先頭と末尾を検索する

StackOverflow https://stackoverflow.com/questions/2368679

  •  24-09-2019
  •  | 
  •  

質問

std::string イテレータだけを与えられた場合、文字列の開始点と終了点を決定することは可能でしょうか?文字列オブジェクトにアクセスできないため、string.begin() と string.end() を呼び出すことができず、できることはイテレータをインクリメントまたはデクリメントして値をテストすることだけだとします。

ありがとう、フィル

役に立ちましたか?

解決

簡単に言うと「ノー」です。長い答えは、反復子は反復処理中のコンテナーまたは範囲について知ることを期待されていないため、期待されるのは単にコンテナーまたは範囲についてであるということです。

  • 次の要素にジャンプできるようにします (inc または dec から next または prev へ)
  • 自身を逆参照して、それらが指している値への参照を明らかにします。
  • そしてもちろん、他のイテレータと比較するのが最も重要ですが、ある種の「終了」イテレータと比較します。

さらに、特定の型の反復子は上記以外のことを実行する場合もありますが、原則として、それらはすべて何らかの形式で上記を実行する必要があります。

他のヒント

  • 文字列の終点の場合:内部文字列は NULL で終了しているものとします。次に、反復子を逆参照してそれらが '\0' であるかどうかを確認し、次の位置が終点であるかを判断します。しかし、その他の null で終了しない文字列の場合、そのような情報を知ることは不可能です。
  • 文字列の開始点の場合:そんなことするわけがない。

デフォルトの std::string::iterator は単なるランダムな双方向反復子であり、コンテナーについては何も知りません。

ただし、Visual C++ プラットフォームで作業している場合は、次のようなハッキング方法を使用してコントロールをコンテナに取得できる可能性がありますが、これは非常に危険です。

  // it is the passed in string::iterator parameter.
  if (it._Has_container()) {
      string* strRef = (string*)it._Mycont;
  }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top