将对象push_back到矢量中

push_back an object into vector

本文关键字:back 对象 push      更新时间:2023-10-16

我有一个对象向量(vector<Vertex> setOfVertices),我想在这个向量中创建指定数量的新对象。这是正确的方法吗?

for (int i = 0; i < 10; i++)
    setOfVertices.push_back(Vertex());

还是这样做更好:

for (int i = 0; i < 10; i++)
{  
   Vertex * V = new Vertex();      
   setOfVertices.push_back(*V);
}

在后一种情况下,我是否需要编写某种析构函数?

还是放弃 std:vector 而改用数组会更好?

second示例存在内存泄漏。

如果你想要的只是一个"填充"函数,那么setOfVertices.insert(setOfVertices.end(), 10, Vertex());就足够了。

但是,如果您想要的是插入不同的Vertex对象,那么

// Make sure only a single memory allocation takes place.
setOfVertices.reserve(setOfVertices.size() + 10);
for (int i = 0; i < 10; i++)
    setOfVertices.push_back(Vertex(i));

您可以使用 std::vector::insert 的 "fill" 重载:

setOfVertices.insert(setOfVertices.end(), 10, Vertex());

无需自己分配内存,std::vector会为您分配内存。 您需要做的就是传递一个"引用"Vector,以便从中复制新元素。