[英]Why am I getting “vector iterators incompatible”?
为什么这个代码
#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不兼容 (Visual C ++ 2008)?
对应于元素的迭代器仅在必须重新分配向量时无效,这reserve
了避免。
但是, v.end()
不会保持有效。
标准对push_back
和insert
的描述保证了这一点
如果新大小大于旧容量,则会导致重新分配。 如果没有重新分配,插入点之前的所有迭代器和引用仍然有效。
v.end()
不是“插入点之前”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.