将一个对象推入向量

时间:2016-03-05 17:29:10

标签: c++ vector

我有一个对象向量(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并使用数组会更好吗?

2 个答案:

答案 0 :(得分:0)

您可以使用std::vector::insert的“填充”重载:

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

没有必要自己分配内存,std::vector会为你做这件事。您需要做的就是为要复制的新元素传递一个“引用”Vector

答案 1 :(得分:0)

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));
相关问题