如何在 c++ 列表中遍历固定数量的元素
How to traverse fixed number of elements in c++ list
我想遍历C++列表中的列表,但只能从倒数第五到最后。但是我看到没有定义"-"运算符,因此我可以使用
list<>::iterator j=i-5;
我可以使用size()
功能以某种方式保持计数等来做到这一点,但是还有其他直接方法吗?
计数是唯一可能不涉及以某种方式有效遍历列表的实用方法。
auto myEnd = std::advance(myList.end(),-5)
但这只会遍历最后五个列表元素以达到您想要的点,因此它并不比大多数其他解决方案更快或更优雅。但是,使用整数循环确实需要同时保留整数计数和迭代器,这实际上只需要迭代器,因此在这方面可能会更好。
如果你的<list>
有一个 O(1) 计数,并且从末端到端的距离很大,请使用整数循环,否则上面很好。
List 不支持随机访问迭代器。可以使用反向迭代器和计数器。
您可以使用
std::advance
将迭代器从最后一个迭代器获取到第五个迭代器。
该列表具有双向迭代器。因此,要从结束迭代器中获取第五个迭代器,您应该应用操作 5 次 - 这是为双向迭代器定义的。C++标准提供了两个执行此任务的功能。2003 C++出现的第一个是std::advance。2011 C++出现的第二个是std::p rev。使用第二个函数 std::p rev 更简单,因为它返回所需的迭代器。例如
std::list<int> l = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::copy( l.begin(), std::prev( l.end(), 5 ), std::ostream_iterator<int>( std::cout, " " ) );
除了可用的答案之外,我建议坚持使用标准算法来遍历列表,而不是直接处理迭代器; 如果你能避免它。
例如:
auto l = list<int>{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for_each(begin(l), prev(end(l), 5), [](const int& i) {
cout << i << endl;
});
http://ideone.com/6wNuMP
相关文章:
- 如何读/写或遍历 std::array 中的特定元素范围?
- 是否有任何优雅的方式来遍历元素位置可以更改的列表?
- 遍历列表包含排除最后一个元素的内容
- 遍历并非所有元素都应具有值的元素
- boost multi_index - 如果元素类型仅支持移动语义,如何遍历它?
- C++ 如何以特定模式遍历矢量的不同集合元素
- 为什么 std::set 遍历所有元素的速度较慢?
- 遍历 STL 映射(集/多集)的最佳方法,同时元素可能会在循环期间被删除并重新插入?
- 循环遍历向量<string>并保持每个元素"count"时出现问题
- 如何遍历 QStack 对象的元素
- 在C 中的字符串向量的字符串元素中循环遍历所有字符
- 循环遍历向量中的所有(无序)元素对
- 如何在 c++ 列表中遍历固定数量的元素
- 如何遍历向量并知道元素的索引
- 在c++中遍历一个列表并在另一个列表中搜索每个元素
- 如何在不遍历优先级队列的情况下获取该队列的最后一个元素
- 使用另一个向量遍历向量的特定元素
- 使用 c while 循环遍历所有整数数组元素
- 遍历指向错误元素的列表
- 遍历结构元素向量