ИМХО самый простой способ сделать это - заставить ваш vectorwithhook :: push_back вернуть новый end () и использовать его следующим образом:
pointer = v.push_back (new_item);
ПРИМЕЧАНИЕ: вам придется сделать это для всех членов, которые изменяют содержимое вектора (например, emplace_back, pop_back, insert и т. Д.)
В качестве альтернативы, это также должно быть возможно путем создания собственного типа распределителя,который будет принимать ссылку на итератор и контейнер в конструкторе и обновлять его каждый раз при вызове allocator :: allocate (...) или allocator :: dellocate (...).Обратите внимание, что это идет вразрез с принципами STL, который был разработан, чтобы иметь итераторы, контейнеры, распределители, отделенные друг от друга ...
PS Ничто из этого не звучит как хорошая идея, я бы подумал о переработке кодачтобы не использовать итератор end () вместо выполнения каких-либо действий.