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?