为什么我得到“矢量迭代器不兼容”?
问题描述:
为什么这个代码为什么我得到“矢量迭代器不兼容”?
#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)?
答
当元素必须被重新分配时,元素对应的迭代器才会失效,这个reserve
可以避免。
但是,v.end()
将不会保持有效。
的push_back
和insert
保障标准的描述是
导致重新分配,如果新的尺寸比旧款更大的容量。如果没有重新分配, 插入点之前的所有迭代器和引用保持有效。
v.end()
不是“插入点之前”。
+1 D ...这太讨厌了。什么是最好的解决方法? – Mehrdad 2013-04-06 20:29:05
在索引上运行'for'循环? – 2013-04-06 20:30:37
@Mehrdad,我不认为'insert'可以避免这个混乱? – chris 2013-04-06 20:30:43