我想将一个元素附加到列表而不复制任何已存在的变量。
int some_big_int = 123456789;
struct heavy_struct {
std::vector<double> vec(some_big_number, 0);
};
std::list<heavy_struct> my_list;
heavy_struc new_item;
my_list.push_back(new_item);
如果我理解正确的话会发生这种情况:
heavy_struct
实例创建名为new_item my_list
创建一个新的heavy_struct
实例,其中new_item
被复制是否可以只追加新的heavy_struct
,而无需复制已有的结构?
在这种情况下,这种复制过程很沉重,无用。
答案 0 :(得分:9)
是:
my_list.emplace_back();
将其参数(在本例中为none)传递给列表中就地构造的heavy_struct
对象。
答案 1 :(得分:1)
你可以使用指向重结构的指针列表,从而将沉重的深拷贝更改为指针对齐
std::list<heavy_struct*> my_list;
如果您不想处理内存管理,请使用共享指针而不是原始指针。