История изменений
Исправление khrundel, (текущая версия) :
Знаешь, беру свои слова обратно. Даже в случае таймеров как ты описал, решение на списках хуже массивного, причём как по производительности, так и по удобству.
В качестве айдишников берём монотонно растущие целые числа. Удаление из начала тривиально, просто проверять статус. Для очереди используем, внезапно, очередь. Отмена через:
if (timers_deque.size() > 0)
{
int64_t index = timer_id - timers_deque[0].timer_id;
if (index >= 0)
deque[index].canceled = true;
}
И никакой дрочки счётчиков ссылок, никаких ненужных аллокаций.
Исходная версия khrundel, :
Знаешь, беру свои слова обратно. Даже в случае таймеров как ты описал, решение на списках хуже массивного, причём как по производительности, так и по удобству.
В качестве айдишников берём монотонно растущие целые числа. Удаление из начала тривиально, просто проверять статус. Для очереди используем, внезапно, очередь. Отмена через:
if (timers_deque.size() > 0)
{
int64_t index = timer_id - timers_deque[0].timer_id;
if (index >= 0)
deque[index].canceled = true;
}