Какие есть альтернативы Generics Collections TStack?

Я хочу сохранить некоторые строковые данные в стеке.

Документация Delphi для System.Generics.Collections.TStack для Делфи XE4.

Я прочитал ответ г-на Хеффернана в Отсутствующие единицы (IcePack, Generics.Collections)

Какие есть альтернативы стеку помимо массивов?


person Wennie    schedule 17.11.2015    source источник
comment
Зачем искать альтернативу? Он по-прежнему доступен в XE8 (также в D 10 Seattle). То, что код примера помечен как XE4, просто означает, что это был последний раз, когда он редактировался, и он все еще действителен. Обсуждение, на которое вы затем ссылались, касалось того, что кто-то с D2006 просил TStack, который был опубликован в D2009 и, следовательно, не подходит для него.   -  person Tom Brunberg    schedule 17.11.2015
comment
Я попытался добавить System.Generics в список использования моего кода. Но он говорит, что: [dcc32 Fatal Error] frmMain.pas(12): F2613 Модуль «System.Generics» не найден.   -  person Wennie    schedule 17.11.2015
comment
Вам нужно добавить System.Generics.Collections   -  person MBo    schedule 17.11.2015
comment
@MBo, это не работает.   -  person Wennie    schedule 17.11.2015
comment
Так и есть, если только вы не сделали что-то странное. Пожалуйста, отправьте код (отредактируйте свой вопрос), который терпит неудачу. Если возможно, сократите его до простого автономного консольного приложения. Во время упрощения вы можете обнаружить, в чем проблема...   -  person HeartWare    schedule 17.11.2015
comment
@ Венни: это должно сработать. Если нет, возможно, что-то не так с путем библиотеки вашего проекта. Убедитесь, что это правильно.   -  person Rudy Velthuis    schedule 17.11.2015


Ответы (1)


Вероятно, вы пытаетесь использовать неуниверсальный стек (который находится в System.Contnrs).
Вот полный рабочий пример для универсального TStack<>:

program ProjectC;
{$APPTYPE CONSOLE}
uses
  System.SysUtils,
  System.Generics.Collections;

var
  Stack: TStack<Integer>;

begin
  Stack := TStack<Integer>.Create;
  try
    Stack.Push(1);
    Stack.Push(2);
    while Stack.Count > 0 do
      Writeln(Stack.Pop);
  finally
    Stack.Free;
  end;
  Readln;
end.
person MBo    schedule 17.11.2015