插入到迭代器的向量中

时间:2013-06-05 08:37:30

标签: c++ vector iterator

我必须使用迭代器在向量中的特定位置插入元素。 我不能使用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();

4 个答案:

答案 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,所以你应该问自己的问题是“是否有任何等同于的迭代器失效了吗?“