c ++在向量的末尾插入元素

mad*_*hov 1 c++ size vector

我遇到了矢量容器的问题.我正在努力提高将大量元素插入到一个向量中的性能.

基本上我正在使用vector :: reserve来扩展我的vector _children如果需要:

if (_children.capacity() == _children.size())
{
     _children.reserve(_children.size() * 2);
}
Run Code Online (Sandbox Code Playgroud)

并使用vector :: at()在_children的末尾插入一个新元素而不是vector :: push_back():

_children.at(_children.size()) = child;
Run Code Online (Sandbox Code Playgroud)

_children中已有一个元素,因此第一个元素应插入位置1,此时的容量为2.

尽管如此,还是会抛出out_of_range错误.有人可以向我解释一下,我在这里误解了什么?即使所选位置小于矢量容量,是否也不可能只插入一个额外的元素?如果需要,我可以发布更多代码.

提前致谢.

/ MADS

Mar*_*tos 8

增加容量不会增加向量中的元素数量.它只是确保向量具有增长到所需大小的能力,而无需重新分配内存.即,你还需要打电话push_back().

请注意,要求reserve()几何增加容量是浪费精力.std::vector已经这样做了.