У меня есть следующий класс List:определения местоположения, является ли членом определенного списка
typedef int Elem; // list base element type
class NodeList { // node-based list
private:
struct Node { // a node of the list
Elem elem; // element value
Node* prev; // previous in list
Node* next; // next in list
};
public:
class Iterator { // an iterator for the list
public:
Elem& operator*(); // reference to the element
bool operator==(const Iterator& p) const; // compare positions
bool operator!=(const Iterator& p) const;
Iterator& operator++(); // move to next position
Iterator& operator--(); // move to previous position
friend class NodeList; // give NodeList access
private:
Node* v; // pointer to the node
Iterator(Node* u); // create from node
};
public:
NodeList(); // default constructor
int size() const; // list size
bool empty() const; // is the list empty?
Iterator begin() const; // beginning position
Iterator end() const; // (just beyond) last position
void insertFront(const Elem& e); // insert at front
void insertBack(const Elem& e); // insert at rear
void insert(const Iterator& p, const Elem& e); // insert e before p
void eraseFront(); // remove first
void eraseBack(); // remove last
void erase(const Iterator& p); // remove p
private: // data members
int n; // number of items
Node* header; // head-of-list sentinel
Node* trailer; // tail-of-list sentinel
};
Мой код не делает любой проверки, чтобы определить, является ли данная позиция (объект итератора) на самом деле является членом конкретный список. Например, если p является позицией в списке S, и я вызываю T.insert (p, e) в другом списке T, тогда я бы фактически добавлял элемент к S непосредственно перед p. Как я могу изменить свою реализацию NodeList, чтобы запретить такое злоупотребление?
Не могли бы вы просто сделать его статическим? – fileoffset
Предположительно мне нужно использовать либо новое поле в объекте позиции, либо новую функцию запроса в списке. – user1824518
Подобное поведение похоже на 'std :: list' ([Live demo] (http://coliru.stacked-crooked.com/view?id=a1fe493224aec77d1a91b5e182b0a7bd-7063104e283ed82d51a6fde7370c6e59)) – soon