LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

Ты не можешь из указателя на элемент за O(1) сделать обратно итератор для std::list (для std::vector можешь, но там нет гарантий стабильности указателей). То есть для erase тебе потребуется std::find, который за O(N) будет искать твой элемент. То есть преобразование итератора в указатель происходит с потерей информации (восстановимой, но всё же).

Если бы не была нужна возможность восстановиь итератор, то можно было бы вообще сделать get у shared_ptr и не париться (ну или &**).

Исправление KivApple, :

Ты не можешь из указателя на элемент за O(1) сделать обратно итератор для std::list (для std::vector можешь, но там нет гарантий стабильности указателей). То есть для erase тебе потребуется std::find, который за O(N) будет искать твой элемент.

Если бы не была нужна возможность восстановиь итератор, то можно было бы вообще сделать get у shared_ptr и не париться (ну или &**).

Исправление KivApple, :

Ты не можешь из указателя на элемент за O(1) сделать обратно итератор для std::list (для std::vector можешь, но там нет гарантий стабильности указателей). То есть для erase тебе потебуется std::find, который за O(N) будет искать твой элемент.

Если бы не была нужна возможность восстановиь итератор, то можно было бы вообще сделать get у shared_ptr и не париться (ну или &**).

Исходная версия KivApple, :

Ты не можешь из указателя на элемент за O(1) сделать обратно итератор для std::list (для std::vector можешь, но там нет гарантий стабильности указателей). То есть для erase тебе потебуется std::find, который за O(N) будет искать твой элемент.