【发布时间】:2021-08-21 00:10:08
【问题描述】:
在使用 STL 的 C++ 中,我有一个 std::forward_list<int> 我想修改其迭代器,但我不确定如何/是否可能。
假设我有以下元素的前向列表:
std::forward_list<int> list {1,2,3,4,5};
在这里,list.begin() 返回1。我怎样才能移动list.begin()?假设我想将开始迭代器设置为索引 3。那么列表将如下所示:
{4,5,1,2,3} // includes adjusting list.end() the same amount of begin()
这可能吗?或者这是一种通过指针来做到这一点的方法?
【问题讨论】:
-
我不认为它总是指向数组中的第一个元素。
-
std::next(list.begin(), index)- 虽然很贵 -
begin总是引用第一个元素,end迭代器总是引用最后一个元素之后的元素。您可以重新排列列表中的元素。如果这就是你想要的:std::rotate -
我认为没有你想要的解决方案。迭代器只是一个指针,主要数据的容器是私有分配的。与其他 stl 容器一样,
std::forward_list没有使用自己的成员函数进行 shift rotation 操作。或者,您可以通过iterator++从begin()+n迭代到!=begin()+n。
标签: c++ linked-list iterator