Я пишу облегченную версию некоторых контейнеров из STL для себя.
(Я знаю, что STL был написан профессиональными программистами, и я слишком глуп или слишком честолюбив, если думаю, что могу написать это лучше, чем они. Когда я писал свой список (только с помощью метода, который мне нужен), он работал несколько раз быстрее. Итак, я подумал, что это хорошая идея. Но, в любом случае.)
Я был разочарован скоростью std::stack::pop()
. Я взглянул на Соуза и обнаружил, что нет хорошего алгоритма. Я полагаю, почти так же, как и я:
void pop()
{
if(topE) // topE - top Element pointer
{
Element* n_t = topE->lower; // element 'under' that one
delete topE;
topE = n_t;
}
}
Но он работает намного медленнее, чем у STL.
erase(--end());
Кто-нибудь может мне объяснить, почему стирание итератора происходит быстрее?