为什么我得到"矢量迭代器不兼容"?

Meh*_*dad 11 c++ iterator vector visual-studio-2008 visual-c++

为什么这个代码

#include <algorithm>
#include <iterator>
#include <vector>

int main()
{
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.reserve(v.size() * 2);  // Reserve enough space to keep iterators valid
    std::copy(v.begin(), v.end(), std::back_inserter(v));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

给我调试断言失败,Expression:vector iterators不兼容(Visual C++ 2008)?

Ben*_*igt 14

对应于元素的迭代器仅在必须重新分配向量时失效,这reserve避免了.

但是,v.end()不会保持有效.

标准的描述push_backinsert保证

如果新大小大于旧容量,则会导致重新分配.如果没有重新分配,插入点之前的所有迭代器和引用仍然有效.

v.end() 不是"在插入点之前".

  • +1 Dang ......这太烦人了.什么是最好的解决方法? (2认同)