推进列表迭代器
Advancing a list iterator
有没有办法将第二个 for 循环的索引启动到 (i+1(?我尝试提前清理,但如果我将其插入 for 循环中,每次迭代它都会前进 1。我只是希望它从(i + 1(开始并继续。
for (list< list<string> >::const_iterator i = l.begin(); i != l.end(); i++)
if (i -> front() == s)
for(list<string>::const_iterator j = i ->begin(); j != i -> end(); j++)
cout << *j << " ";
-
j = i -> begin() + 1
抛出了一个错误。 -
j = advance(i, 1) -> begin()
也失败了。
您可以使用不修改其参数的std::next
std::list<string>::const_iterator j = std::next(i->begin());
或推导迭代器类型
auto j = std::next(i->begin());
当您想要将给定迭代器推进某个位置时,将使用std::advance
。 advance(it, n)
实现了it += n
,而next(it, n)
实现了it + n
。 Advance 不返回任何内容,它在其输入上完成工作。
带有积分的operator+
不适用于std::list
,因为它具有双向迭代器,二进制加号仅受 RandomAccessIterator 支持。
<iterator>
提供的这些实用程序使用一些模板魔术来找出推进迭代器的最佳方法。简而言之,如果你给next
一些没有operator+
的东西,它会复制并反复调用++
N次。
相关文章:
- 跟随整数索引列表的自定义类迭代器
- 列表的有效性在插入后开始迭代器
- C++列表迭代器
- 测试迭代器是否位于列表中的最后一个
- 当通知迭代器参数初始化为空列表的开头时,list::insert 行为是什么?
- C++不能取消引用结束列表迭代器
- 创建以向量/列表迭代器为键的映射
- 对列表中的向量使用迭代器
- 使用列表迭代器获取所有值
- 如何实现列表:<T>:迭代器?
- 将列表迭代器存储为成员
- 将列表 en 列表迭代器作为指针 C++ 传递
- 如何从该列表的元素中获取 std::list<T>::迭代器?
- 空列表迭代器比较始终为真
- 如何在给定迭代器列表的情况下从向量中删除元素
- C++迭代器列表
- 迭代器列表,用于从各种列表中收集条目
- 如何在 Map 中存储集合容器的迭代器列表
- 迭代器列表
- 操作迭代器列表+指针