我不确定我的方法是否正确,所以我要求你验证。 我正在尝试将单个对象添加到2D矢量。这是代码:
std::vector<std::vector<*Tree>> treeVector(100);
for (auto &j : treeVector)
j.assign(treeVector.size(), new Tree(0, 0));
该类名为Tree
。该代码有效,但似乎在向量中有对象加倍?
我错过了什么吗?
答案 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
代替,这将有助于管理内存。