У меня есть хэш-карта, которая содержит элементы структуры Foo (не указатели).Теперь я хочу, чтобы указатели этих элементов были в списке.Как я могу это сделать?
Примерно так:
typedef Whatever_Hash_Map<Foo> Container;
Container container;
...populate container...
std::list<Foo*> l;
for (Container::const_iterator i = container.begin(); i != container.end(); ++i)
l.insert(&*i);
...use list...
Я попытался перебрать хэш-карту и вставить в список & & iter, но указатели получаютстановится недействительным, как только они выходят за рамки.
Вы не можете использовать этот список, если разрешите что-либо выйти из области видимости.Если вам нужно, чтобы список сохранялся после возврата функции, которая его создала, обязательно выделите сам список в куче и верните указатель на него.
Я должен сделать этобез динамического выделения, не так ли?
Список распределяет узлы динамически.Карта хеша, вероятно, внутренне распределяет сегменты динамически.Но вам не нужно явно выделять указатели на Foos динамически - все стандартные и подобные контейнеры будут копировать Foos в кучу, используя семантику значений (т. Е. Конструктор копирования Foo или оператор присваивания).
Мне нравится это, и оно не работает: for (...) {Foo & bar = * iter;list.insert (& бар);}
Это само по себе выглядит хорошо, ошибка в другом месте вашего кода.Вот почему вы должны следовать предложению Джеймса и опубликовать достаточно кода, чтобы мы могли указать на вашу ошибку.