STL: список итераторов себя

Dmitriy82

Возможно ли описать в c++ конструкцию такого типа

typedef list<A::iterator> A;

?
По всему list::iterator - это указатель, а указатель на что-то, даже ещё не описанное
(но объявленное) использовать в описании можно. Но в данном случае мешают шаблоны.
Меня интересуют способы, опирающиеся на STL (вручную реализовать такую структуру данных ничего не стоит и по возможности "чистые" (без явных приведений типов и т.д.)

Werdna

Список итераторов создать, конечно, ты можешь... Хм, но такой техники я не встречал. И еще, учитывай, что итераторы "долго не живут", Удалишь то что под итератором -- похерятся другие.
И еще, итератор нельзя мыслить как указатель! Все-таки это целый класс, имеющий свои операторы и методы. А то с таким же успехом можно и std::string назвать указателем

ppplva

 #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;
}

Сойдет ?

Dmitriy82

Точно, я ошибся конечно, что итератор - это указатель. Насчет долго не живут - даже в списке?
А пусть даже и так - может элементы этого спика указывают на элементы другого списка, и
его я менять не собираюсь. В любом случае, интерес у меня чисто теоретический. Т.е.
я когда обдумывал реальную задачу, мне пришла в голову мысль об этой конструкции, но
потом я понял как сделать лучше. А мысль осталась.

ppplva

Удалишь то что под итератором -- похерятся другие
Всегда считал, что похерится только тот, кого похерили. У списка вообще живучие итераторы.

Werdna

Всегда считал, что похерится только тот, кого похерили.

Если похерить инератор вектора, то похерится следующий итератор. Например так.
У списка -- да, живучие, согласен. Но речь шла об абстрактных итераторах

Dmitriy82

Да, забавно. Насколько я понял, раз это работает, запись
list<A>::iterator ещё не означает, что надо специфицировать весь шаблон,
а только один typedef _hzhzhz_ iterator в нём.
Оставить комментарий
Имя или ник:
Комментарий: