Как я могу вернуть второй элемент стека без функции pop () в C ++? - PullRequest
5 голосов
/ 04 июня 2011

Мне нужна помощь для возврата второго элемента стека без pop ()?но я не знаю, как я могу использовать.

мой код:

stack<int> st;
st.push(10);
st.push(20);
st.top(); // return 20

Как я могу сделать эту функцию возвращает 10 без pop ();

Спасибо.

PS извините за мой английский.

Ответы [ 4 ]

5 голосов
/ 04 июня 2011

Я предполагаю, что вы пытаетесь эмулировать машину, основанную на стеке?

Вот единственный способ сделать это с помощью std :: stack:

stack<int> st;
st.push(10);
st.push(20);
int top = st.top(); // return 20
st.pop();
int second = st.top(); // return 10
st.push(top);

Если вам нужно другое поведениевам придется сделать собственную реализацию stack, которая имеет больше возможностей.

3 голосов
/ 04 июня 2011

Если вы хотите получить второй элемент, зачем вам нужен stack в качестве представления?Стек является представлением LIFO, поэтому теоретически вы не извлекаете второй элемент , только последний добавленный.

Используйте другое представление, такое как упомянутый @Naveen.

3 голосов
/ 04 июня 2011

Вы не можете сделать это с stack, как это должно быть LIFO, если вы хотите, чтобы такое поведение использовало другие последовательные контейнеры, такие как vector, deque или list.

2 голосов
/ 04 июня 2011

Если вы сделаете это, это больше не будет стек по определению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...