10

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

ありがとう、フィル

4

2 に答える 2

6

簡単な答えはノーです。長い答えは、イテレータは反復しているコンテナまたは範囲について知ることを期待されていないため、次のことだけを期待されているということです。

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

さらに、特定のタイプのイテレータは、上記以外のことも実行できますが、基本的には、何らかの形で上記を実行する必要があります。

于 2010-03-03T04:27:49.360 に答える
1
  • 文字列の終点の場合:内部文字列がヌル終了であると想定します。次に、イテレータを逆参照して、イテレータが「\ 0」であるかどうかを確認し、次の位置がエンドポイントであるかどうかを判断します。しかし、他のnullで終了していない文字列の場合、そのような情報を知ることは不可能です。
  • 文字列の開始点の場合:そのようなことを行う方法はありません。

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

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

  // it is the passed in string::iterator parameter.
  if (it._Has_container()) {
      string* strRef = (string*)it._Mycont;
  }
于 2010-03-03T06:06:55.523 に答える