Емкость вектора - это не количество элементов, которые он имеет, а количество элементов, которые он может хранить без выделения дополнительной памяти. Емкость равна или превышает количество элементов в векторе.
В вашем примере _children.size()
равен 1, но в позиции 1 элемента нет. Вы можете использовать присваивание только для замены существующих элементов, но не для добавления новых. По определению, последний элемент находится в _children.at(_children.size()-1)
.
Правильный способ - просто использовать push_back()
, который высоко оптимизирован и быстрее, чем вставка в индекс. Если вы заранее знаете, сколько элементов вы хотите добавить, вы, конечно, можете использовать reserve()
в качестве оптимизации.
Нет необходимости вызывать резерв вручную, поскольку vector
автоматически изменит размер внутреннего хранилища, если это необходимо. На самом деле, я полагаю, что то, что вы делаете в своем примере, аналогично тому, что вектор делает внутри себя в любом случае - когда он достигает емкости, резервируйте вдвое больше текущего размера.
См. Также http://www.cplusplus.com/reference/stl/vector/capacity/