Re: STL и указатели
От: retalik www.airbandits.com/
Дата: 16.09.02 04:48
Оценка:
Здравствуйте the_moon, Вы писали:

TM>
TM>class BaseClass
TM>{
TM>    void DoSomeThing()
TM>};
^^^^^^^virtual?
TM>class EndClass : public BaseClass
TM>{
TM>};
TM>std::set<EndClass> Cars;
TM>std::set<EndClass> People;
TM>std::list< BaseClass* > Objects;
TM>

TM>Вся проблема в том, что если я добавлю Car в set, то как мне получить указатель на этот Car,
TM>что бы его запихать потом в Objects.
А что мешает перебирать элементы std::set? Или в Objects может храниться не такой набор объектов, как в set?

В принципе, после вставки ты можешь получить итератор, а по нему добраться до указателя на объект:
//типа using namespace std
pair<iterator, bool> insert(const value_type& x);
...
pair<set<EndClass>,bool> p = Cars.insert(MyCar);
Objects.push_back(&*p.first);

Как написано в стандарте, insert не влияет на действительность итераторов и ссылок контейнера.

Но, на мой взгляд, связываться с указателями в данном случае, неразумно — попахивает деталями реализации.

Лучше опиши тип контейнера как
typedef std::set<BaseClass> BaseSet;
...
BaseSet Cars, People;

И храни в своем контейнере итераторы:
std::list<BaseSet::iterator> Objects;
Успехов,
Виталий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.