如何在没有最后一个元素的情况下迭代列表
How to iterate a list without the last element
我想做的只是迭代一个 std::list
,除了最后一个元素。我正在尝试什么:
#include <cstdlib>
#include <list>
int main() {
std::list<int> *list = new std::list<int>(100);
std::list<int>::iterator it;
for (it = list->begin(); it != list->end()-1; it++) {
// some action here...
}
}
但是,这将行不通。怎么了?
std::list
使用双向迭代器,该迭代器不支持operator-
。改用std::prev
:
for (it = list->begin(); it != std::prev(list->end()); it++) {
// some action here...
}
关于为什么失败的原因:
list::iterator
是BidirectionalIterator
。它不能使用operator-
降低,也不能使用operator+
增加。这些操作是为RandomAccessIterator
的模型保留的。但是,您可以使用operator--
将其降低。
std::list<int> x;
// --end(x) would work as well here, but I don't recommend it
auto end = end(x);
--end;
// or even better
end = std::prev(end(x));
for(auto it = begin(x); it != end; ++it) {
}
另外,请放下指针。您的简单示例已经在泄漏内存。
相关文章:
- 我可以在没有堆栈的情况下在二叉搜索树中实现迭代器吗?
- 在无法访问向量的情况下查找迭代器的末尾
- 在不使用vector.end()的情况下迭代std::vector
- 如何在不迭代的情况下对数组中的每个元素调用方法
- 我怎样才能在不重复的情况下随机迭代向量的每个元素
- 如何在没有迭代器的情况下使用 std::for_each + std::execution::p ar?
- 如何在不迭代的情况下从string_view向量创建字符串向量?
- 是否可以在不显式迭代每个元素的情况下深度复制指针容器?
- 有没有办法在不使用任何迭代的情况下将字符的字母顺序排列
- 在这种情况下,可以比较无效的迭代器
- 如何在不使用循环或迭代器的情况下检查所有列表元素并在满足条件时删除一个
- 如何迭代在不知道其大小的情况下读取的字符串?
- 如何在给定迭代器列表的情况下从向量中删除元素
- 如何在没有原因(有输入)的情况下修复迭代;在 c++ 中?
- 有没有办法在不使用两个 for 循环的情况下迭代两个容器
- 在给定迭代器的情况下检索容器的比较函数
- 如何在没有最后一个元素的情况下迭代列表
- 在不增加引用计数的情况下迭代共享指针的映射
- Numpy C++:如何在没有段错误的情况下迭代 PyArrayObject
- 有没有一种方法可以在不使用递归的情况下迭代n维数组(其中n是变量)