Итак, у меня есть какой-то устаревший код, который я бы хотел использовать более современными методами.Но я боюсь, что, учитывая то, как все устроено, это не вариант.Основная проблема заключается в том, что часто узел находится в нескольких списках одновременно.Примерно так:
struct T {
T *next_1;
T *prev_1;
T *next_2;
T *prev_2;
int value;
};
это позволяет ядру иметь один объект типа T
, который может быть выделен и вставлен в 2 дважды связанных списка, красиво и эффективно.
Очевидно, я мог бы простоиметь 2 std::list<T*>
и просто вставить объект в обоих ... но есть одна вещь, которая была бы гораздо менее эффективной ... удаление.
Часто код должен "уничтожить" объектвведите T
, и это включает удаление элемента из всех списков.Это хорошо, потому что при наличии T*
код может удалить этот объект из всех списков, в которых он существует. С чем-то вроде std::list
мне нужно будет найти объект, чтобы получить итератор, а затем удалить его (я не могупросто передайте итератор, потому что он есть в нескольких списках).
Есть ли хорошее решение для C ++ - ish или это лучший способ вручную?У меня есть ощущение, что ручным способом является ответ, но я решил спросить.