这是一个非常直截了当的问题.有没有办法有一个向量并初始化一个元素而不构造然后复制它?
class BigType
{
// has a costly copy constructor
};
int main(void)
{
using std::vector;
vector<BigType> bigTypeVec;
bigTypeVec.push_back(BigType(/*constructor from parameters*/));
// This constructs a temp object, and then copies it to the new element.
}
Run Code Online (Sandbox Code Playgroud)
当然有各种各样的工作包括涉及指针的向量,或者不使用构造函数,用set函数初始化元素的组件,但是我想知道是否有办法做到这一点它可以调用它在push_back期间分配的元素上的构造函数.
编辑:这个问题被标记为重复,但我查看了该页面并且他的问题的答案没有回答我的问题.我想知道如何通过构造一次来设置元素的值,而不是将构造临时对象复制到元素中.Emplace是一个很好的方法.
您可以使用std::vector<...>::emplace()或,如果要附加对象std::vector<...>::emplace_back(),则可以在适当位置构造对象.如果必须使用C++ 03,则此成员函数不可用.作为近似,你可以push_back()和空对象然后swap()你BigType进入相应的位置,假设你可以构造一个小的空对象.
请注意,std::vector<...>如果您有大型对象,则不一定是最佳数据结构:如果保留空间用完,则向量需要对周围的对象进行洗牌以创建新空间.您可能想要使用std::deque<...>,因为它不会将其对象放置(除非您插入到中间),同时具有类似的访问特性std::vector<...>.