using namespace std;
class myList
{
public:
mylist():_internalList(),_lastPostition(0)
{
}
typedef list<string>::iterator Itr;
bool enqueue(string);
Itr next()
{
if(_lastPostition == 0)
_lastPostition = _internalList.begin();
if(_lastPostition == _internalList.end())
return (_lastPostition = 0);
return _lastPostition++;
}
private:
list<string> _internalList;
Itr _lastPostition;
}
enqueue
不是push_back
,它是根据某些自定义逻辑插入的。
我无法使用std::set
和重载operator <
,因为我的插入逻辑不具有传递性 - ( a < b && b < c)
并不意味着a < c
。
这有效,但我不确定它是否是一个未定义的行为。 将0分配给迭代器并检查0是否安全?
答案 0 :(得分:4)
“将0分配给迭代器并检查0是否安全?”否。
答案 1 :(得分:0)
您不能将0指定给迭代器,您必须使用其他一些特殊值,例如end()
。
答案 2 :(得分:0)
您应该如下所示实施next
,并且还应该提供has_next()
来检查列表中是否有下一个项目。
Itr next()
{
if ( !has_next() )
_lastPostition = _internalList.begin();
return ++_lastPostition;
}
bool has_next() const
{
Itr temp = lastPostition;
return (++temp== _internalList.end());
}
注意:next()
的行为是循环的;也就是说,在到达终点时,它会再次开始!