我想要做的只是迭代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...
}
}
但是,这不起作用。有什么问题?
答案 0 :(得分:4)
std::list
使用双向迭代器,它不支持operator-
。请改用std::prev
:
for (it = list->begin(); it != std::prev(list->end()); it++) {
// some action here...
}
答案 1 :(得分:4)
至于为何失败:
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) {
}
另外,请放下指针。你的简单例子已经泄漏了内存。