私は C++ を学んでいて、STL コンテナーを見てきました。たくさんの質問がありますが、これが最初に行くことができると思います。このクラスとそのベクトルを考えてみましょう。
class A {
int i;
// A(const A&);
public:
A(int i) : i(i) {cout << "consting " << i << endl;}
A(const A& ot) : i(ot.i) {cout << "copying " << i << endl;}
};
int main () {
vector<A> v1 = {A(1),A(2),A(3),A(4)};
vector<A> v2(1,A(5));
vector<A> v3;
v3.push_back(A(6));
}
私に出力を与える
consting 1
consting 2
consting 3
consting 4
copying 1
copying 2
copying 3
copying 4
consting 5
copying 5
consting 6
copying 6
明らかに、それぞれを構築してコピーしていA
ます。
これを防ぐ方法はありますか。つまり、余分なコピーを避けA
てベクターに構築する方法です。これは可能ですか?そうでない場合、誰かが理由を説明できますか? ありがとうございました。
編集:完成のためpush_back
に同じことをします