可能性の重複:
Does moving a vector invalidate iterators?移動によってstd :: vector :: data()が保持されますか?
次のコードを考えてみましょう:
std::vector<T> prepare(T*& data) {
std::vector<T> buffer;
// Fill in buffer.
data = buffer.data();
return buffer;
}
...
T* data;
auto vec = prepare(data);
// line 12
は、それが可能ライン12でvec.data() != data
ということですか?同様に、
std::vector<T> buffer;
// ... Fill in buffer ...
T* data = buffer.data();
auto vec = std::move(buffer);
// line 5
行5のvec.data() != data
は可能でしょうか?
実際には、移動コンストラクタは単純なポインタ代入として実装されているため、libstdC++とlibC++の実装ではどちらも使用できませんが、標準では何も指定していないようです(Is the capacity required to be preserved when moving a std::vector?)。 "一定の複雑さ"を保証することができますvec.data() == data
?
イテレータ/ポインタを無効にするものは、かなりよく列挙されています。 –
関連項目:http://stackoverflow.com/questions/4124989/does-stdvectorswap-invalidate-iterators –