Ответ в теме: Итераторы

#4940
+1

makish
Участник
Сообщений:14

Зарегистрирован:
04.06.2015

Репутация:6

Ну начнем с того, что возможно ты делаешь что-то неправильно, если тебе нужен текст в отдельном списке. Ведь твоя задача так и звучит: “Нужно чтобы у каждого врага был свой текст со своим здоровьем”, а как минимум это уже значит, что текст должен быть в классе врага.
Но если вдруг возникла такая необходимость, то можно попробовать следующие варианты:

  1. Вместо std::list использовать std::deque. В нем можно получать доступ к элементам по их номеру, а значит можно сделать так:

    Но нужно знать, что в этом массиве доступ к элементу по оператору [i] происходит долго, а значит при большом количестве врагов и текста игра начнет тормозить.

  2. Использовать контейнер ключ-значение, в твоем случае подойдет std::unordered_map<Entity*, Up*>. Но циклы по этому контейнеру также очень медленные.
  3. Хранить в каждом объекте текста указатель на его врага(или наоборот). Например:

    тогда можно будет создать простой цикл:

    Такой вариант на производительность никак не повлияет, но мало чем отличается от простого хранения текста в классе врага. И нужно подумать как присвоить тексту его врага при создании.