Для чего используются стеки?Почему они в C ++? - PullRequest
2 голосов
/ 20 декабря 2011

Я просматривал C ++ с книгой Практическое программирование на C ++ , и наткнулся на эти вещи, называемые стеками. Определенный в книге, он определен как алгоритм хранения данных.

Из того, что я видел в книге, это похоже на сборку ... Я также вспоминаю, что читал что-то о чем-то 16-битном.

Итак, мой вопрос: для чего используются стеки, они все еще полезны или это старый метод выполнения чего-то, что можно сделать проще и эффективнее с 32/64 битными компьютерами? Я просто очень озадачен тем, для чего нужны стеки.


Редактировать: Поскольку мой вопрос настолько расплывчатый, я перефразирую его ... Что такое стек и когда его следует использовать.

Ответы [ 4 ]

6 голосов
/ 20 декабря 2011

Стеки - это не метод, а структура данных, последний пришел, первый вышел (LIFO).

В C ++ std::stack<> - это шаблон класса, данные которого могут быть любого типа. Есть много ситуаций, когда последнее - это то, что вам нужно.

Примером являются виртуальные машины или интерпретаторы, которые используют архитектуру стека для сохранения рабочего состояния во время выполнения функций / процедур. Рассмотрим следующий интерпретатор языка, где подпроцедуры могут не изменить состояние вызывающего:

std::stack<RunState> state;
Instruction i = fetch();

switch (i.type()) {
case Instruction.Call:
    state.push (state.top());
    break;
case Instruction.Return:
    state.pop();
    break;
...
}

В Википедии есть больше примеров для использования структур данных стека. Некоторые задачи сортировки решаются относительно легко с помощью стеков.

Как и во всех структурах данных, и C ++ имеет некоторые из них ( списки , очереди , устанавливает , карты (или ассоциативные массивы, или словари) , массивы / векторы и более), они могут вам не понадобиться сейчас и, может быть, даже не через 2 года, но вы должны знать о них, их свойствах, преимуществах, недостатках и когда это подходящий момент для их использования.

6 голосов
/ 20 декабря 2011

Зависит от того, о каком стеке вы говорите.

Первый - это место хранения в памяти.

Стек - это структура данных «первым пришел - первым вышел», которая по-прежнему очень полезна независимо от 16/32/64-битных компьютеров.

Как уже говорили другие, стек вызовов (или «стек») является примером стека в действии.

4 голосов
/ 20 декабря 2011

По сути, они используются, когда вам нужно хранить данные в режиме LIFO (Last In, First Out).Вы можете найти информацию здесь .Работа над 16/32/64 / любой другой архитектурой битов не имеет ничего общего с принципом стека.

2 голосов
/ 20 декабря 2011

Вы можете использовать стек в случае стандартной логики LIFO. Существует множество проблем, требующих логики LIFO.

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