[Qt] Container Class – 2. QQueue, QStack

이전 글에 이어서 QQueue, QStack에 대해 알아보겠습니다.

QQueue와 QStack 클래스는 자료구조에서 큐와 스택을 구현한 클래스이며, 모두 QList를 상속받아서 만들어 졌습니다.
QList와 큰 차이는 없으며 QList의 모든 함수를 사용할 수 있습니다.

큐와 스택의 가장 큰 차이는 입력한 데이터의 출력 순서입니다.

QQueueQStack
First In First Out(FIFO, 선입선출)First In Last Out(FILO, 선입후출)
은행 업무
프린터 인쇄 대기열
Undo/Redo
웹 브라우저 뒤로 가기/앞으로 가기
문자열 뒤집기

더 자세한 개념은 구글에 검색해보시길 바랍니다.

QQueue

QQueue 사용법은 아래와 같습니다.

  • 선언 : QList와 같이 QQueue T에 자료형을 입력하여 선언
  • 데이터 삽입 : 인라인 함수 enqueue 사용
  • 맨 앞 데이터 확인 : 인라인 함수 head 사용(큐에서 데이터 삭제 X)
  • 데이터 삭제 : 인라인 함수 dequeue 사용

예제 코드는 아래와 같습니다.

// QQueue 선언
QQueue<int> intQueue;

// QQueue 데이터 입력
for(int i = 0 ; i < 10 ; i++)
{
    qDebug() << "enqueue: " << i;
    intQueue.enqueue(i); // 큐에 데이터 입력
}
qDebug() << intQueue;

// QQueue 맨 앞 데이터 확인
qDebug() << "head: " << intQueue.head();

// QQueue 데이터 삭제
while(!intQueue.isEmpty())
    qDebug() << "dequeue: " << intQueue.dequeue(); // 큐에서 데이터 삭제
qDebug() << intQueue;

출력 결과는 아래와 같습니다.

QDebug로 로그를 찍어보면 QList로 나오는데 이상 없는 로그입니다.

QStack

QStack 사용법은 아래와 같습니다.

  • 선언 : QStack T에 자료형을 입력하여 선언
  • 데이터 삽입 : 인라인 함수 push 사용
  • 맨 위 데이터 확인 : 인라인 함수 top 사용(스택에서 데이터 삭제 X)
  • 데이터 삭제 : 인라인 함수 pop 사용

예제 코드는 아래와 같습니다.

// QStack 선언
QStack<int> intStack;

// QStack 데이터 입력
for(int i = 0 ; i < 10 ; i++)
{
    qDebug() << "push: " << i;
    intStack.push(i);
}
qDebug() << intStack;

// QStack 맨 위 데이터 확인
qDebug() << "top: " << intStack.top();

// QStack 데이터 삭제
qDebug() << "pop: " << intStack.pop(); // 맨 마지막에 입력된 데이터가 삭제됨
qDebug() << "pop: " << intStack.pop(); // 맨 마지막에 입력된 데이터가 삭제됨
qDebug() << intStack;
while(!intStack.isEmpty())
    qDebug() << "pop: " << intStack.pop();
qDebug() << intStack;

출력 결과는 아래와 같습니다.

QQueue와 다르게 pop 함수 호출하면 맨 뒤에 있는 데이터가 삭제되는 것을 볼 수 있습니다.

이상으로 QQueue와 QStack에 대해 알아보았습니다.

  • 참고 문서
    • https://doc.qt.io/qt-6/qqueue.html
    • https://doc.qt.io/qt-6/qstack.html