#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