我正在学习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
也是一样的
std::initializer_list
"拥有" 它的内容,因此每个使用它的构造函数都必须复制这些元素。这虽然不合理,但这就是std::initializer_list
的工作方式。很遗憾。 - ipcA(6)
,只需添加6
即可。 - Mooing Duck