Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL deque::empty()와 deque::size() 함수 완벽 가이드

이 글에서는 C++ STL에서 제공하는 deque::empty()deque::size() 함수의 동작 원리, 문법, 그리고 실제 활용 예제를 자세히 살펴보겠습니다.

덱(Deque)이란?

덱(Double Ended Queue)은 양쪽 끝에서 요소의 삽입과 삭제가 모두 가능한 시퀀스 컨테이너입니다. 일반적인 큐(Queue) 자료구조에서는 데이터를 뒤쪽(Rear)에만 삽입하고 앞쪽(Front)에서만 삭제할 수 있습니다. 버스 정류장의 줄을 떠올려 보면 이해하기 쉽습니다. 새로 온 사람은 항상 줄의 맨 뒤에 추가되고, 맨 앞에 서 있는 사람이 가장 먼저 탑승하며 줄에서 빠져나갑니다. 반면 덱은 이름 그대로 양쪽 끝 어느 쪽에서든 데이터를 넣고 뺄 수 있어 훨씬 유연한 자료구조입니다.

deque::empty()란?

deque::empty()는 C++ STL에 내장된 함수로, <deque> 헤더 파일에 선언되어 있습니다. 이 함수는 해당 deque 컨테이너가 비어 있는지(크기가 0인지) 여부를 확인하여, 컨테이너가 비어 있으면 true를, 그렇지 않으면 false를 반환합니다.

문법

mydeque.empty();

매개변수

이 함수는 어떤 매개변수도 받지 않습니다.

반환 값

주어진 deque 컨테이너가 비어 있거나 크기가 0이면 true를 반환하고, 컨테이너에 요소가 하나라도 존재하면 false를 반환합니다.

예제

Input: deque<int> mydeque = {10, 20 30, 40};
      mydeque.empty();
Output:
      False

Input: deque<int> mydeque;
      mydeque.empty();
Output: True

실전 예제

#include <deque>
#include <iostream>
using namespace std;

int main(){
    int product = 1;
    deque<int> Deque;

    // push_back() 함수를 사용해 deque에 요소 삽입
    Deque.push_back(10);
    Deque.push_back(20);
    Deque.push_back(30);
    Deque.push_back(40);
    Deque.push_back(50);

    // empty() 함수를 사용해 deque가 빌 때까지 순회
    while(!Deque.empty()){
        product = product * Deque.front();
        Deque.pop_front();
    }

    // deque가 비어 있는지 확인
    if(Deque.empty()){
        cout<<"Deque is empty and hence product is : "<<product;
    } else {
        cout<<"Deque is not empty ";
    }
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Deque is empty and hence product is : 12000

위 예제에서는 front()로 각 요소를 읽어 곱한 뒤 pop_front()로 제거하는 과정을 empty()가 true가 될 때까지 반복합니다. 최종적으로 10 × 20 × 30 × 40 × 50 = 12,000이 계산되며, 모든 요소가 제거된 후 deque가 비었다는 메시지와 함께 결과가 출력됩니다.

deque::size()란?

deque::size() 역시 C++ STL에 내장된 함수로, <deque> 헤더 파일에 선언되어 있습니다. 이 함수는 호출된 deque 컨테이너에 저장된 요소의 개수, 즉 컨테이너의 크기를 반환합니다. 컨테이너에 요소가 전혀 없다면 0을 반환합니다.

문법

mydeque.size();

매개변수

이 함수는 어떤 매개변수도 받지 않습니다.

반환 값

컨테이너에 저장된 요소의 개수를 부호 없는 정수(unsigned integer) 값으로 반환합니다.

예제

Input: deque<int> mydeque = {10, 20 30, 40};
      mydeque.size();
Output:
      4

Input: deque<int> mydeque;
      mydeque.size();
Output: 0

실전 예제

#include <deque>
#include <iostream>
using namespace std;

int main(){
    int product = 0;
    deque<int> Deque;

    // deque에 요소 삽입
    Deque.push_back(10);
    Deque.push_back(20);
    Deque.push_back(30);
    Deque.push_back(40);
    Deque.push_back(50);

    // deque의 크기 확인
    cout<<"Size of deque is : "<<Deque.size();
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Size of deque is : 5

두 함수의 차이점 정리

deque::empty()는 컨테이너가 비어 있는지만 bool 값으로 판단해 주고, deque::size()는 실제 저장된 요소의 개수를 숫자로 반환합니다. 두 함수 모두 매개변수를 받지 않으며 O(1)의 시간 복잡도로 동작합니다. 단순히 빈 컨테이너 여부만 확인할 때는 의미가 더 명확한 empty()를 사용하는 것이 좋으며, while 루프의 종료 조건이나 유효성 검사 등 다양한 상황에서 널리 활용됩니다.