[英]insert into a vector with 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();
您可以组合std::vector::push_back
在后面插入新元素,然后从<algorithm>
插入std::rotate
rotate将最后一个元素旋转到所需位置。
当然push_back
不会保留迭代器,因此请首先使用std::distance(v.begin(), it)
(来自<iterator>
)来确定所需位置的索引。
调整大小不能保留迭代器,因为调整大小操作可能会使迭代器指向的内容无效。
Stardard程序将首先检查是否需要调整大小,然后在可选的调整大小操作之后,以所需的任何方式继续插入新元素。
调整向量的大小会使其迭代器无效。 在调用resize()
, pos
不是有效的迭代器,应再次将其重新分配给wb.begin()
。
听起来,本练习的目的是教您关于迭代器无效的知识 ,因此您应该问自己的问题是:“是否有等效于迭代器且不会失效的等效项?”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.