0

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

所以很明显,我的调整大小弄乱了迭代器位置。有想法该怎么解决这个吗?

编辑:您可能想知道我如何声明我的迭代器:

auto pos = wl.begin();
4

4 回答 4

1

您可以组合std::vector::push_back在后面插入新元素,然后std::rotate<algorithm>将最后一个元素旋转到所需位置。

当然push_back不保留迭代器,所以使用std::distance(v.begin(), it)first (from <iterator>) 来确定所需位置的索引。

于 2013-06-05T08:45:42.523 回答
0

调整大小不能保留迭代器,因为调整大小操作可能会使迭代器指向的内容无效。

标准程序将首先检查您是否需要调整大小,然后在可选的调整大小操作之后继续以任何您想要的方式插入新元素。

于 2013-06-05T08:44:18.310 回答
0

调整向量的大小会使其迭代器无效。调用后resize(), ,pos不是有效的迭代器,应wb.begin()再次重新分配给。

于 2013-06-05T08:44:58.550 回答
0

听起来这个练习的目的是教您有关迭代器失效的知识,所以您应该问自己的问题是“是否有任何等效于不会失效的迭代器?”

于 2013-06-05T08:54:41.857 回答