Meh*_*dad 11 c++ iterator vector visual-studio-2008 visual-c++
为什么这个代码
#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;
}
Run Code Online (Sandbox Code Playgroud)
给我调试断言失败,Expression:vector iterators不兼容(Visual C++ 2008)?
Ben*_*igt 14
对应于元素的迭代器仅在必须重新分配向量时失效,这reserve避免了.
但是,v.end()不会保持有效.
标准的描述push_back和insert保证
如果新大小大于旧容量,则会导致重新分配.如果没有重新分配,插入点之前的所有迭代器和引用仍然有效.
v.end() 不是"在插入点之前".
| 归档时间: |
|
| 查看次数: |
9319 次 |
| 最近记录: |