Я пишу более легкую версию некоторых контейнеров из STL для себя.C++: скорость std :: stack :: pop() метод
(Я знаю, что 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());
Может кто-нибудь объяснить мне, почему стирание итератора происходит быстрее?
Список, возможно, самый худший/самый медленный контейнер. Тот факт, что вы используете список для вашего стека, делает его хуже, потому что 'std :: stack' не (по умолчанию). – GManNickG
@GMan - Черт, я об этом не думал - я не использую std :: stack, поэтому я забыл, что он по умолчанию делит deque. Хорошая точка зрения. – Steve314
@GMan, Ну, и если мне нужна не сортированная группа объектов и возможность пройти через все (итерацию), что мне использовать? Задавать? –