繁体   English   中英

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

[英]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_backinsert的描述保证了这一点

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM