C ++将对象添加到矢量

时间:2017-02-15 19:02:18

标签: c++ object vector

我不确定我的方法是否正确,所以我要求你验证。 我正在尝试将单个对象添加到2D矢量。这是代码:

std::vector<std::vector<*Tree>> treeVector(100);

for (auto &j : treeVector)
        j.assign(treeVector.size(), new Tree(0, 0));

该类名为Tree。该代码有效,但似乎在向量中有对象加倍? 我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

循环

for (auto &j : treeVector)
  j.assign(treeVector.size(), new Tree(0, 0));

相当于

for (auto &j : treeVector) {
  Tree *tmp = new Tree(0, 0);
  j.assign(treeVector.size(), tmp);
}

每次迭代只分配和构造一棵树,treeVector的每个元素(std::vector<Tree *>)将包含指向同一对象的100个指针。

你想要的是什么:

for (auto &j : treeVector) {
  for (int i=0; i<treeVector.szie(); ++i)
    j.push_back(new Tree(0,0));
}

您可能希望使用std::unique_ptr代替,这将有助于管理内存。