Да.
std::stack
- это просто контейнерный адаптер.
Вы можете видеть, что .top()
на самом деле (§23.3.5.3.1)
reference top() { return c.back(); }
Где c
- контейнер, который в данном случае является std::vector
Это означает, что ваш код в основном переведен на:
extern std::vector<int> st;
int* end = &st.back() + 1;
int* begin = end - st.size();
std::vector<int> stack_contents(begin, end);
И поскольку std::vector
гарантированно будет непрерывным, проблем не должно быть.
Однако это не значит, что это хорошая идея. Если вам нужно использовать такие «хаки», как правило, это показатель плохого дизайна. Вы, вероятно, хотите использовать std::vector
с самого начала.