Некоторые новички могли после первого изучения std::stack в С++ начать писать его вместо std::vector, но это заблуждение и std::vector оптимальнее std::stack
Оверхед. По умолчанию он использует deque, а не vector. Зачем вам лишние аллокации и фрагментация памяти, когда vector делает push_back и pop_back за O(1) с минимальным оверхедом?
Бесполезные ограничения. Вы не можете заглянуть внутрь, кроме top(). А если вам нужен предпоследний элемент? С vector вы просто делаете v[v.size()-2] и всё. С stack вы вынуждены сначало удалять последний элемент при этом запоминая его а потом возварщать его обратно чтоб взять например предпоследний элемент.
Никакой итерации. Хотите пройтись по элементам? Забудьте. А с vector вы можете спокойно пройтись по элементам.
vector быстрее по скорости чем stack
- Вот сравнение std::vector и std::stack по скорости
Вот код для стека
#include <iostream>
#include <stack>
int main() {
int n = 1e7;
std::stack <int> st;
for (int i = 0; i < n; ++i) {
st.push(i);
}
long long sum = 0;
while (!st.empty()) {
sum += st.top();
st.pop();
}
std::cout << sum;
}
Вот код с вектором
#include <iostream>
#include <vector>
int main() {
int n = 1e7;
std::vector <int> v;
for (int i = 0; i < n; ++i) {
v.push_back(i);
}
long long sum = 0;
for (auto& i : v) {
sum += i;
}
std::cout << sum;
}
- Первый Код работает на моём компьютере за 0.183 секунды а второй за 0.109, что значительно лудше посравнению с результатом стэка.
Вывод: почти всегда std::vector будет лудше чем std::stack. Поэтому не советую его использовать, потому что ещё и с std::vector вы получите больший функционал.








