我必须使用迭代器在向量中的特定位置插入元素。 我不能使用insert()函数(我已经明确指出我应该在没有insert()的情况下执行它。)
这是我的代码(或至少是混淆的部分):
cerr << "distance before resize: " << distance(wl.begin(), pos) << endl;
wl.resize(wl.size()+1);
cerr << "distance after resize: " << distance(wl.begin(), pos) << endl;
move_backward(pos, wl.end()-1, wl.end());
(*pos) = temp;
我的输出:
distance before resize: 0
distance after resize: -322
如此出色,我的调整大小弄乱了迭代器pos。关于如何解决这个问题的任何想法?
编辑:您可能想知道我如何声明我的迭代器:
auto pos = wl.begin();
答案 0 :(得分:1)
您可以合并std::vector::push_back
在后面插入新元素,然后从<algorithm>
合并std::rotate
,将最后一个元素旋转到所需位置。
当然push_back
不保留迭代器,因此首先使用std::distance(v.begin(), it)
(来自<iterator>
)来确定所需位置的索引。
答案 1 :(得分:0)
调整大小不能保留迭代器,因为调整大小操作可能会使迭代器指向的内容无效。
标准程序将首先检查您是否需要调整大小,并且在可选的调整大小操作之后,您可以以任何您想要的方式插入新元素。
答案 2 :(得分:0)
调整向量大小会使其迭代器无效。调用resize()
后,pos
不是有效的迭代器,应该再次重新分配给wb.begin()
。
答案 3 :(得分:0)
听起来这个练习的目的是教你iterator invalidation,所以你应该问自己的问题是“是否有任何等同于不的迭代器失效了吗?“