2016-03-05 4 views
-6

У меня есть вектор объектов (vector<Vertex> setOfVertices), и я хочу создать указанное количество новых объектов этого вектора. Это правильный способ сделать это?push_back объект в вектор

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 и использовать массивы?

+4

'Vertex V = новый Vertex(); 'это компилируется для вас? Для этого требуется специальный конструктор для 'Vertex'. – juanchopanza

+0

Мне очень жаль, я забыл про звездочки, редактируя немедленно –

+3

Теперь у вас есть утечка памяти. – juanchopanza

ответ

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)); 
+0

Спасибо за полный ответ! –

0

Вы можете использовать «заполнить» перегрузка std::vector::insert:

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

Там нет необходимости выделять память самостоятельно, std::vector сделает это за вас. Все, что вам нужно сделать, это передать ссылку «Vector» для новых элементов для копирования.

+0

Спасибо, это отличное решение! –

Смежные вопросы