델파이에서 큐(Queue)를 사용하려면
TQueue
클래스를 사용하면 된다.
TQueue
클래스는 System.Generics.Collections 유닛에 포함되어 있고,
제너릭(Generic)을 사용하여 설계되어 있으므로 다음과 같이 선언해서 사용하면 된다.
var
QueueS: TQueue<String>;
QueueI: TQueue<Integer>;
begin
...
...
end;
그리고 엠바카데로 공식 Wiki 에 간단한 예제를 함께한 설명이 있어서 참고하였다.
procedure QueueTest;
var
Queue :TQueue<String>; //System.Generics.Collections
begin
try
Queue := TQueue<String>.Create; //Queue 생성
// Enqueue() : queue의 끝에 item을 추가한다.
Queue.Enqueue('John');
Queue.Enqueue('Mary');
Queue.Enqueue('Bob');
Queue.Enqueue('Anna');
Queue.Enqueue('Erica');
// Peek() : 가장 먼저 추가한 요소를 삭제없이 리턴한다.
Memo1.Lines.Add('첫번째 요소 : ' + Queue.Peek());
// Extract : 가장 먼저 추가한 요소를 삭제한다.
Queue.Extract;
// TrimExcess : Queue의 공간을 재조정(빈공간 해제)한다.
Queue.TrimExcess;
// Count : Queue의 개수를 리턴한다.
Memo1.Lines.Add('The queue now contains ' + IntToStr(Queue.Count) + ' elements.');
// Dequeue() : 가장 먼저 추가한 요소를 리턴 후 삭제한다.
Memo1.Lines.Add('First enqueued element was: "' + Queue.Dequeue() + '".');
Queue.Clear; //Clear the Queue
finally
Queue.Free; //Queue를 Destroy한다.
end;
end;
Queue는 FIFO 구조이기 때문에, 나중에 입력한 값은 조작하기 어렵다는 특징이 있다.
그래서 Java 혹은 Python은 Queue를 앞,뒤로 pop하거나 add할 수 있는 Deque
구조를 지원한다.
하지만 델파이는 공식적으로 Deque를 지원하지 않으므로, 직접 구현해서 사용하거나 오픈소스를 찾아봐야 한다.