1


0

ベクターに保存されたオブジェクトへのポインターを使用しています…​ c++

私はグローバルな範囲でmyObjectsのベクトルを持っています。

std::vector

メソッドには、ベクトル内のいずれかの要素へのポインタが渡されます。 次の要素に到達するために、このメソッドはポインタをインクリメントすることができます、

myObject* pmObj;

++pmObj; // the next element ??
または、 `+ std

Vector :: iterator +`を渡して、代わりにインクリメントする必要がありますか?

今のところ、ベクトルはその間に変更されないだろうと仮定する。

3 Answer


6


はい - 標準は技術的な修正において、ベクトルの格納が連続していることを保証しているので、ベクトルへのポインタのインクリメントはうまくいきます。


3


はい。これは、標準で `+ std

vector +`が連続ストレージを使用することが義務付けられているため、期待どおりに機能します。 ある範囲のオブジェクトを扱う場合は、2つの反復子を渡すことをお勧めします。 これはSTLで採用されている標準的な慣用句です。 カウントなどに頼るのではなく、反復のための明示的なエンドポイントがあるため、これによってコードの安全性も少し向上します。


2


ベクトルが再割り当てされておらず、ベクトルの範囲を超えないことが確実な場合は、この方法を使用できます。 ポインタをインクリメントすることは正当であり、あなたが次の要素に移動するスペースを持っている間、ベクトルのバッファはメモリの単一ブロックなのでポインタをインクリメントすることによってそうすることができます。