C++ 使用迭代器插入向量

C++ 使用迭代器插入向量,c++,vector,iterator,C++,Vector,Iterator,我必须使用迭代器在向量中的特定位置插入元素。 我不能使用insert()函数(我已经得到了明确的指导方针,没有insert()我应该这样做) 这是我的代码(或至少是出错的部分): 很明显,我的调整大小弄乱了迭代器的位置。有没有办法解决这个问题 编辑:您可能想知道我如何声明迭代器: auto pos = wl.begin(); Resize无法保留迭代器,因为调整大小操作可能会使迭代器指向的内容无效 标准程序是先检查是否需要调整大小,然后在可选的调整大小操作后,继续以任何方式插入新元素。调整向量

我必须使用迭代器在向量中的特定位置插入元素。 我不能使用insert()函数(我已经得到了明确的指导方针,没有insert()我应该这样做)

这是我的代码(或至少是出错的部分):

很明显,我的调整大小弄乱了迭代器的位置。有没有办法解决这个问题

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

auto pos = wl.begin();
Resize无法保留迭代器,因为调整大小操作可能会使迭代器指向的内容无效


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

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

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


当然,
push_-back
不会保留迭代器,所以首先使用
std::distance(v.begin(),it)
(从
)来确定所需位置的索引。

听起来这个练习的目的是教你,所以你应该问自己的问题是“是否有任何等价于迭代器的东西不会失效?“

调整大小
可能会重新分配
向量的内部内存。你的<代码> PoS<代码>指向原始内存中间的某个地方,它不再存在。相反,存储你想要的职位的索引,并使用它。
std::rotate
是一个聪明的解决方案,但是你给了OP一个家庭作业答案,而没有让他们去想:(@RickYorgason:Hm,也许吧,但是我并不是为了让人们思考…:-S而获得报酬的(如果他们想要的话,他们可以去上学。)
distance before resize: 0
distance after resize: -322
auto pos = wl.begin();