Это зависит от базового контейнера std::stack
:
template <class T, class Container = deque<T>> class stack;
Шаблон класса действует как оболочка для базового контейнера
По умолчанию Container = deque<T>
. И std::deque
не является смежным:
элементы двухсторонней очереди не хранятся непрерывно
Следовательно,
stack<int> s;
является не непрерывным , потому что std::deque
не является непрерывным.
Однако
типичные реализации (из std::deque
) используют последовательность индивидуально выделенных массивы фиксированного размера
Вот почему некоторые тестовых случаев не прошли; смежность нарушалась, когда размер стека превышал размер одного из базовых массивов фиксированного размера.
Если нижележащий контейнер указан явно (стандартные контейнеры std::vector
и std::list
удовлетворяют требованиям, кроме std::deque
), и если этот контейнер является непрерывным, то этот стек также является непрерывным.
Например,
stack<int, vector<int>> s;
является смежным , потому что std::vector
является смежным.
TL; DR
Смежность std::stack
определяется смежностью его нижележащего контейнера.
Я также хотел бы поблагодарить сообщество за то, что оно показало мне способы, как люди находят ответы на такие вопросы по программированию, и это заставляет меня искать решения по ссылкам.