Если вы исправите ошибки, давайте обсудим принципы. Самая большая ошибка производительности - увеличение размера с постоянным значением INC. С этой ошибкой сложность вставки n элементов равна O (n 2 ). Для большей сложности, перераспределите с кратностью 2 или 1,5, после исправления сложность вставки n элементов становится O (n) или амортизированной O (1) для одной вставки.
Два подхода были тщательно протестированы на C ++: что быстрее std:: vector
(аналогично вашему стеку) или std::list
(двусвязный список). Вот список ресурсов:
Списки проще в реализации и имеют лучшую предсказуемость (без изменения размера), но векторы в среднем быстрее в стековом сценарии и более эффективны при использовании памяти.
Векторы (стек в вопросе):
Размер: нет необходимости хранить указатели на следующий элемент. Так что это более эффективно.
Скорость: последовательные элементы расположены рядом друг с другом, что обеспечивает лучшую предсказуемость памяти и более высокую эффективность кэширования.
списки:
Размер: не нужно находить один большой блок памяти (лучше работает во фрагментарной памяти).
Скорость: предсказуемая - не нужно время от времени копировать большие куски памяти.