用迭代器插入vector对象
insert into a vector with iterator
必须使用迭代器在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()
。
听起来这个练习的目的是教您关于迭代器无效的知识,所以您应该问自己的问题是"是否存在与不无效的迭代器等效的东西?"
相关文章:
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 传递 std::vector of std::shared_ptr,而不是更新对象
- vector是否为std::移动的对象连续分配内存
- 为什么 vector 的方法调整大小会创建一个额外的对象?
- 将RVO对象传递到std::vector::template_back
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 错误 C2280 / 在 std::vector 中实例化对象时复制构造函数出现问题?
- 如何从 Pyhon 端对存储在 std::vector 中的对象进行持久更改,作为 std::shared_ptr
- 如何将 Python 对象转换为 Cython 扩展类型的 std::vector 并返回?
- 访问类的 std::vector 与 for 循环中的 custum 类对象
- 如何将类对象push_back到 std::vector 中
- 具有另一个类对象的 std::vector 的类
- 使用运算符重载添加存储在 vector 中的类对象
- 我如何在std :: vector中生成对象,而无需复制
- 如何在用户定义类型的向量上使用 vector::p ush_back() 来仅修改一个对象?
- C++ std::vector 创建对象然后添加对象与在向量中创建对象之间的区别?
- 在<Object>基于范围的 for 循环中从 std::vector 获取指向对象的指针
- 成员功能在面向对象的框架中返回std :: vector.size()的效率
- 不允许抽象类类型的对象 "Vector<LinkedList<int>>"