我正在学习 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
做同样的事情