Вектор указателей, указывающих на объекты в векторе объектов. Как это сделать?

#c #pointers #vector

#c #указатели #вектор

Вопрос:

Здесь у меня проблема с C .

У меня есть три класса: граф, узлы и ребра, для моделирования простого графика. Теперь объект класса Graph имеет вектор с объектами класса Node и вектор с объектами класса Edge.

Объект класса Node должен знать все входящие и исходящие ребра. И объект класса edge должен знать, с какого узла он приходит и к какому узлу он идет. Теперь у меня есть следующая проблема: все ребра в графе хранятся в векторе в классе edge. Объекты класса node также должны знать некоторые ребра, поэтому я дал им вектор указателя, чтобы указать на принадлежащие ребра в векторе графика. Но моя проблема сейчас: если я удаляю ребро из вектора графика, указатели неверны.

Я не хочу копировать каждое ребро в два вектора, поэтому я думаю, что должен сделать это таким образом, но я действительно вижу проблему удаления чего-либо из вектора.

Есть ли решение или мне нужно копировать каждое ребро? Кто-нибудь может мне помочь, пожалуйста?

Комментарии:

1. Чтобы наша помощь была наиболее ценной, можете ли вы сказать нам, это домашнее задание? То есть, это учебное упражнение, или это упражнение для работы или удовольствия?

2. @Rob: 99% говорит, что это не домашнее задание. Возможно, академическое, но не домашнее задание

3. Ну, это академично. Единственная проблема, с которой я сталкиваюсь, заключается в следующем. Все остальное в этом упражнении для меня понятно и будет легко написано, но у меня проблемы с этой векторной вещью. Потому что я должен делать это с векторами, и я не могу копировать слишком много объектов.

4. Расскажите нам подробнее о том, «Я должен сделать это с помощью векторов». Почему бы не использовать, например, std::list ?

5. В упражнении приведены некоторые объявления показанных функций, которые я должен использовать в том виде, в каком они там показаны. А те, которые возвращают все доступные ребра или узлы, имеют ‘vector’ в качестве functiontype.

Ответ №1:

Я бы использовал дескрипторы или просто использовал shared_ptr для всех контейнеров.

Дескрипторы являются предпочтительным оружием в библиотеке Boost Graph