我遇到了矢量容器的问题.我正在努力提高将大量元素插入到一个向量中的性能.
基本上我正在使用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
增加容量不会增加向量中的元素数量.它只是确保向量具有增长到所需大小的能力,而无需重新分配内存.即,你还需要打电话push_back().
请注意,要求reserve()几何增加容量是浪费精力.std::vector已经这样做了.