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

时间:2013-04-06 20:24:24

标签: c++ visual-studio-2008 visual-c++ vector iterator

为什么这段代码

#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;
}

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

1 个答案:

答案 0 :(得分:14)

与元素对应的迭代器仅在必须重新分配向量时失效,reserve避免使用。

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

标准对push_backinsert的描述保证了

  

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

v.end()不是“在插入点之前”。