0

重複の可能性:
C++イテレータが有効かどうかを確認するための最良の方法

以下のように、イテレータを唯一のパラメータとする関数があるとしましょう。

void DoSomethingWithIterator(std::vector<int>::iterator iter)
{
   // Check the pre-condition
   assert( /* how to validate iter here? */ )

   // Operate on iter afterwards
   ..
}

有効かどうかはどうすればわかりiterますか。m_intVector.begin()有効とは、ベクトル内の既存の要素、たとえばfromからを指していることを意味しm_intVector.end()ます。

4

2 に答える 2

6

一般的に、それはできません。C ++タイプは、最大限に効率的になるように設計されており、そのような追加情報は含まれていません。

たとえば、vectorのイテレータは、要素へのポインタと同等である可能性があります(これは、g ++ 4.7.2を使用する私のマシンの場合です)。

于 2013-01-22T01:45:02.463 に答える
0

m_intVector.begin()>つまり、fromからなどのベクトル内の既存の要素を指しているということm_intVector.end()です。

Sure. Just iterate through the contents of m_vector, and compare each iterator to iter.

for ( std::vector<int>::iterator it = m_intVector.begin (); it != m_intVector.end (); ++it )
    if ( it == iter ) return true;
return false;

But I suspect that you won't want to pay for that kind of checking.

于 2013-01-22T06:15:34.453 に答える