c ++ std :: list :: push_back,无需复制现有实例

时间:2015-01-29 16:44:09

标签: c++

我想将一个元素附加到列表而不复制任何已存在的变量。

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,而无需复制已有的结构? 在这种情况下,这种复制过程很沉重,无用。

2 个答案:

答案 0 :(得分:9)

是:

my_list.emplace_back();

将其参数(在本例中为none)传递给列表中就地构造的heavy_struct对象。

答案 1 :(得分:1)

你可以使用指向重结构的指针列表,从而将沉重的深拷贝更改为指针对齐

std::list<heavy_struct*> my_list;

如果您不想处理内存管理,请使用共享指针而不是原始指针。