11


1

STL :: vector :: iteratorでポインター演算を実行できますか

現在、私はイテレータを使用してベクトルを検索し、その要素をテストします。 を使用して要素にアクセスします

std::vector::iterator it;
if (*it == 0);

同じポインター算術スタイルのロジックを使用して、次の要素もテストできます(イテレーターを変更せずに)。

イテレータを境界外にプッシュするかどうかを最初に確認する必要があります

if (it != myvec.end())

次に、現在の要素と次の要素の両方をテストします

if (*it == 1 && *(it + 1) == 1)

これは、ポインターを使用して期待どおりに機能しますか?

3 Answer


16


はい、 `std

vector`のイテレータはhttp://www.cppreference.com/wiki/stl/iterators#iterator_categories [ランダムアクセスイテレータ]であるため、他の有効なイテレータを取得するために整数値を加算/減算します。

技術的には、ポインター算術ではないかもしれませんが、ポインターのように機能します。


3


ベクトル反復子はランダムアクセス反復子であるため、これは実際に機能します。 それは、ポインタで行うのと同じようにそれらに作用できるだけでなく、ポインタ/ポインタ演算を使用して実装されています。


1


さて、イテレータがコンテナの最後の要素にある場合

*(it + 1)

未定義の動作があります。 あなたはそれを確認する必要があります

it + 1 != end

参照解除する前に。