11

为什么这段代码

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

给我调试断言失败,表达式:向量迭代器不兼容(Visual C++ 2008)?

4

1 回答 1

14

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

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

该标准的描述push_backinsert保证

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

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

于 2013-04-06T20:26:41.767 回答