用迭代器插入vector对象

insert into a vector with iterator

本文关键字:对象 vector 插入 迭代器      更新时间:2023-10-16

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

显然,我的resize弄乱了迭代器的位置。有什么办法解决这个问题吗?

edit:你可能想知道我是如何声明迭代器的:

auto pos = wl.begin();

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

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

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

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

调整vector的大小将使其迭代器失效。在调用resize()之后,pos不是有效的迭代器,应该重新赋值给wb.begin()

听起来这个练习的目的是教您关于迭代器无效的知识,所以您应该问自己的问题是"是否存在与无效的迭代器等效的东西?"