Производительность зависит от используемого контейнера. Как уже упоминалось, stack
- это адаптер, базовый контейнер может быть deque
(по умолчанию), или vector
, или list
(все в std
пространстве имен).
Ниже приведен пример сравнения производительности. Поскольку тип сохраняемого файла не указан в этом вопросе, я предполагаю, что он имеет тип unsigned int. Не стесняйтесь менять его в соответствии с вашими требованиями. В примере создается стек из 100 тыс. Элементов.
Содержание stack.cpp
#include <stack>
#include <vector>
#include <list>
#include <deque>
#include <assert.h>
typedef unsigned int Type;
#ifdef USE_VECTOR
typedef std::stack< Type, std::vector< Type > > StackType;
#elif USE_LIST
typedef std::stack< Type, std::list< Type > > StackType;
#else
typedef std::stack< Type, std::deque< Type > > StackType;
#endif
int main() {
StackType mystack;
for( unsigned int i = 0; i < 100 * 1024; ++i ) {
mystack.push( i );
}
assert( mystack.size() == 100 * 1024 );
return 0;
}
Сравнение исполнения:
$ g++ -DUSE_VECTOR stack.cpp -o stack; time ./stack
real 0m0.023s
user 0m0.030s
sys 0m0.031s
$ g++ -DUSE_LIST stack.cpp -o stack; time ./stack
real 0m0.144s
user 0m0.186s
sys 0m0.030s
$ g++ stack.cpp -o stack; time ./stack
real 0m0.024s
user 0m0.030s
sys 0m0.015s
asaha@nedata8 ~/code
$
Указанные числа являются результатом одного прогона. Чтобы получить статистически значимые числа, запускайте каждый вариант большое количество раз и наблюдайте среднее и стандартное отклонение.
Очевидно, deque
и vector
приводят к аналогичной производительности, тогда как list
хуже.