STL: список итераторов себя
И еще, итератор нельзя мыслить как указатель! Все-таки это целый класс, имеющий свои операторы и методы. А то с таким же успехом можно и std::string назвать указателем
#include <list>
struct A {
std::list<A>::iterator i;
A(std::list<A>::iterator i_) : i(i_) {}
operator std::list<A>::iterator {
return i;
}
};
main {
std::list<A> a;
a.push_back(a.begin;
a.push_back(a.begin;
a.push_back(a.begin;
}
Сойдет ?
А пусть даже и так - может элементы этого спика указывают на элементы другого списка, и
его я менять не собираюсь. В любом случае, интерес у меня чисто теоретический. Т.е.
я когда обдумывал реальную задачу, мне пришла в голову мысль об этой конструкции, но
потом я понял как сделать лучше. А мысль осталась.
Удалишь то что под итератором -- похерятся другиеВсегда считал, что похерится только тот, кого похерили. У списка вообще живучие итераторы.
Всегда считал, что похерится только тот, кого похерили.
Если похерить инератор вектора, то похерится следующий итератор. Например так.
У списка -- да, живучие, согласен. Но речь шла об абстрактных итераторах
list<A>::iterator ещё не означает, что надо специфицировать весь шаблон,
а только один typedef _hzhzhz_ iterator в нём.
Оставить комментарий
Dmitriy82
Возможно ли описать в c++ конструкцию такого типа?
По всему list::iterator - это указатель, а указатель на что-то, даже ещё не описанное
(но объявленное) использовать в описании можно. Но в данном случае мешают шаблоны.
Меня интересуют способы, опирающиеся на STL (вручную реализовать такую структуру данных ничего не стоит и по возможности "чистые" (без явных приведений типов и т.д.)