我有一个MyClass向量,其中MyClass是一个大类。当我这样做时:
vector<MyClass> vec;
vec.push_back(MyClass(a,b,c));
这似乎效率很低,因为创建了一个临时的MyClass,将其复制到向量中,然后进行了破坏。
首先有一些方法可以使用placement new直接在向量中创建类吗?我不能这样做:
vector<MyClass> vec;
vec.resize(1);
new(&vec.data[0]) MyClass(a,b,c);
因为vec.resize(1)调用了MyClass构造函数。是否有某种方法可以调整向量的大小而不调用所有新项的构造函数,或者是否可以在下一个可用位置将MyClass直接构造到向量中?
答案 0 :(得分:5)
不,但您可以使用emplace_back
来构建对象:
vec.emplace_back(a,b,c);