STL列表迭代问题
问题描述:
我正在使用STL列表,并在尝试检索最后一个元素时不断收到错误。我有一个类STL列表迭代问题
class Buffer {
private:
list<Flit*> fifo;
...
public:
...
Flit *peek_last_flit(void) const;
...
};
和实现
Flit *Buffer::peek_last_flit(void) const {
if (fifo.empty())
return 0;
Flit *f = *(fifo.begin());
return f;
}
我有一个类似的实现,它返回列表的头。
Flit *Buffer::peek_flit(void) const {
if (fifo.empty())
return 0;
Flit *f = *(fifo.begin());
return f;
}
我怎么可能会接近这个问题(我打电话两种程序,但是当我打电话Peek_last_flit我得到一个调试asserion失败消息: 表达:列表迭代器不dereferencable
我如何可以保留迭代器? 任何帮助将非常感激。
答
Flit *Buffer::peek_last_flit(void) const {
if (fifo.empty())
return 0;
return fifo.back();
}
答
container.end()
是从来没有dereferencable。
你需要--container.end()
才能得到最后一个元素。
似乎应该有'fifo.end()'在questio中'peek_last_flit' – RiaD 2012-07-21 11:05:42