std::vector
のアイテムは動的に割り当てられ、再割り当てが発生するとそのアドレスが変更されることがあります。したがって、安定していないため、アドレスに依存することはできません。安定ベクトルのアイテムのアドレスを使用する
一方、いくつかのアイテムを含むstd::vector
があり、そのライフサイクル中に何かを変更するつもりがない場合、そのアイテムのアドレスを使用することは有効です(明確に定義されていますか)。 ?
例:つまり
std::vector<foo> foos;
foos.reserve(100);
for(size_t i=0;i<100;++i){
foos.emplace_back(make_random_foo());
}
//From now no one can touch foos
auto ptr_to_the_fifth_foo=&foos[4];
、私は私の自己であることをしなかったので、注目には、ベクトル項目のアドレスに影響する標準保証していますか?
参照やイテレータを無効にするメンバ関数を使用しない限り、ポインタも無効にしません。 – Pixelchemist
はい、これは、std :: vectorを使用していない限り動作します。 –
JVApen