0

http://www.cplusplus.com/reference/vector/vector/emplace_back/に従って 、 emplace_back は代入演算子を呼び出さずにオブジェクトを作成することを理解しました。ただし、std::vector の場合は代入演算子を呼び出し、std::list の場合は代入演算子を呼び出しません。

私のオブジェクトはコピーできません。ポインタを使用する以外に問題を回避する方法はありますか。

また、ベクトル内の消去は代入演算子を呼び出すようですが、リスト内の消去は代入演算子を呼び出しません。これは私には間違っているようでした..

std はコピーできないオブジェクトをサポートしていませんか?

4

1 に答える 1

5

vector連続した配列内の要素を維持するために、要素型が移動可能である必要があります (必ずしもコピー可能である必要はありません)。

古い容量が小さすぎる場合、挿入はいつでも、すべての要素を新しい配列に移動する必要がある場合があります。最後を除いて消去するには、消去された要素の後の要素を前方に移動する必要があります。

他のコンテナでは型が可動である必要はないので、deque(どちらかの端での挿入と削除をlist許可する) または (どこでも挿入と削除を許可する) は、それを作成できない (またはしたくない) 場合のオプションかもしれません。可動。

于 2015-02-09T18:40:26.637 に答える