迭代器不访问完整的矢量
Iterator does not access full vector
int main()
{
vector<int> vi;
vi.reserve(10);
// back_insert_iterator<vector<int> > iter(vi);
vector<int>::iterator iter = vi.begin();
*iter = 1;
++iter;
*iter = 2;
++iter;
*iter = 3;
back_insert_iterator<std::__1::vector<int> > iterb(vi);
back_inserter(vi) = 4;
back_inserter(vi) = 5;
vi.reserve(vi.size() * 2);
copy(vi.begin(), vi.end(), vi.end());
ostream_iterator<int> os(cout, " ");
copy(vi.begin(), vi.end(), os);
}
问题1,为什么cout
打印4 5
,而我期望它会打印1 2 3 4 5 1 2 3 4 5
?问题2,当我用copy(vi.begin(), vi.end(), back_insert(vi))
替换它时,它会打印4 5 4 5
,为什么?
您的代码具有未定义的行为,因为您分配给位于末尾或之后的迭代器。 reserve(( 函数不会更新大小,只会更新容量。 你可以尝试 resize(( 代替。
copy(vi.begin(),vi.end(),vi.end())
不起作用,因为std::copy
写入目标迭代器,并且您无法写入结束迭代器。
copy(vi.begin(),vi.end(),back_insert(vi))
不起作用,因为back_insert_iterator
在插入时会更改向量,从而使源迭代器失效。
您可以改为尝试以下操作:
size_t vi_size = vi.size();
vi.resize(vi_size*2);
copy(vi.begin(),vi.begin()+vi_size,vi.begin()+vi_size);
相关文章:
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 如何为我的容器实现随机访问迭代器?
- 对于C++随机访问迭代器(矢量迭代器),迭代器之间的差异是如何计算的?
- 对于随机访问迭代器(矢量迭代器),迭代器C++样式指针吗?
- 随机访问迭代器:我错过了什么?
- 有没有办法在C++中制作无锁"counter"随机访问迭代器?
- 如何确保函数模板的参数是随机访问迭代器
- C++基于现有随机访问迭代器的反向迭代器
- 如何实现随机访问迭代器的"less than operator"?
- 随机访问迭代器和Deque
- 在链表上实现随机访问迭代器
- 如何在C++中比较两个非随机访问迭代器
- C++随机访问迭代器超出范围
- 访问迭代器,向量在库存.h
- 具有deque的随机访问迭代器的迭代器无效
- 访问迭代器值会导致segfault 11
- 基于指针的基本随机访问迭代器的代码
- 将多映射迭代器转换为随机访问迭代器
- 在 65536 位置访问迭代器的指针运算符会导致段错误
- 在并行数组上编写随机访问迭代器