2013-11-21 4 views
0

У меня был быстрый вопрос о стеках, о которых мне было интересно некоторое время.Основы стеков

Если вы задаете переменные значение и затем вставьте их в стек, они будут по-прежнему содержать одни и те же значения после того, как они будут помещены внутри стека, или значения будут «обнулены», и вы должны изменить их в пределах стек?

Как я понимаю, как только вы вытащите переменную из стека, она вернется к значению, которое оно имело до того, как переменная была нажата, правильно? Но сохранит ли переменная ее ценность, когда она будет нажата?

Заранее благодарен!

+0

Это ['std :: stack '] (http://www.cplusplus.com/reference/stack/stack/), о котором мы говорим, не так ли? – dasblinkenlight

+0

Нажатие переменной в стеке отличается от нажатия, скажем, оранжевого цвета в сумке: семантика - это копирование, а не перемещение. Это походит на толкание вашего апельсина в сумке и сохранение его. – dasblinkenlight

ответ

3

Для : Преодолевая что-то не имеет никакого влияния на оригинал, за исключением, если вы push esp, так как PUSH инструкции обычно изменяет ESP (или sp или rsp, в зависимости от текущего режима процессора).

Pop будет перезаписывать текущее содержимое регистра/местоположения тем, что было в данный момент на вершине стека. Это восстановит предыдущее значение, если и только если ваши выталкивания и всплывающие подсказки сбалансированы, поэтому вы находитесь

Для : нажатие может уничтожить оригинал, если вы используете семантику перемещения. Можно перегружать вещи, поэтому то же самое произойдет и в противном случае, но, как правило, это совершенно нецелесообразно (по меньшей мере).

Popping только удаляет элемент из стека. Вы копируете элемент из верхней части стека (или коллекцию, которую вы можете использовать в виде стека, например, vector или deque), затем отдельно поп, чтобы удалить этот элемент из стека.

+0

Большое спасибо за помощь Джерри :) –

Смежные вопросы