直接的な答え:
std::vector::operator=
コンテナーのパブリックメンバー関数を使用してstd::vector
、ベクトルから別のベクトルに値を割り当てることができます。
さらに、コンストラクター関数も意味があります。パラメーターとして別のベクトルを使用するコンストラクター関数(例x
:)は、の各要素のコピーを使用x
して同じ順序でコンテナーを構築します。
注意:
- 使ってはいけません
std::vector::swap
std::vector::swap
はベクターを別のベクターにコピーするのではなく、その名前が示すように、実際には2つのベクターの要素を交換しています。言い換えると、コピー元のソースベクトルstd::vector::swap
はが呼び出された後に変更されますが、これはおそらく予期したものではありません。
ソースベクトルの要素が他のデータへのポインターである場合、深いコピーが必要になることがあります。
ウィキペディアによると:
ディープコピー、つまりフィールドが逆参照されることを意味します。コピーされるオブジェクトへの参照ではなく、参照されるオブジェクトに対して新しいコピーオブジェクトが作成され、Bに配置されたオブジェクトへの参照が作成されます。
実際、現在C ++には、ディープコピーを行う組み込みの方法はありません。上記のすべての方法は浅いです。深いコピーが必要な場合は、ベクターをトラバースして、参照のコピーを手動で作成できます。代わりに、反復のために反復子を検討できます。イテレータについての議論はこの質問を超えています。
参考文献
std::vector
cplusplus.com のページ