1

グローバル スコープに myObjects のベクトルがあります。

std::vector<myObject>

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

myObject* pmObj;

++pmObj; // the next element ??

または、代わりにそれを渡してstd::Vector<myObject>::iteratorインクリメントする必要がありますか?

今のところ、ベクトルはその間変更されないと仮定します。

4

3 に答える 3

7

はい - 標準では、ベクターのストレージが連続していることを技術的な修正で保証しているため、ベクターへのポインターのインクリメントは機能します。

于 2009-03-16T12:35:36.370 に答える
3

はい、std::vector標準によって連続したストレージを使用することが義務付けられているため、これは期待どおりに機能します。オブジェクトの範囲を操作している場合は、イテレータのペアを渡すことをお勧めします。これは、STL で採用されているほとんどの標準イディオムです。これにより、カウントなどに依存するのではなく、反復の明示的なエンドポイントがあるため、コードが少し安全になります。

于 2009-03-16T12:39:32.820 に答える
2

ベクトルが再割り当てされておらず、ベクトルの境界から出ないことが確実な場合は、このアプローチを使用できます。ポインターのインクリメントは合法であり、次の要素に移動するスペースがある間は、ポインターをインクリメントすることで移動できます。これは、ベクターのバッファーが単一のメモリ ブロックであるためです。

于 2009-03-16T12:36:14.217 に答える