더북(TheBook)

T 객체를 컨테이너에 저장하려면 타입 T가 따라야 하는 조건들이 있는데, 이 조건들은 원소들을 다룰 때 필요한 작업들이다. 컨테이너는 보통 원소들을 복제하고, 필요에 따라 원소들을 이동하거나 교환해야 한다. 타입 T 객체를 컨테이너에 저장하려면 최소한 다음과 같은 모습이어야 한다.

class T
{
    public:
    T(); // 기본 생성자
    T(const T& t); // 복제 생성자
    ~T(); // 소멸자
    T& operator=(const T& t); // 할당 연산자
};

컴파일러가 기본 생성자, 복제 생성자, 소멸자, 할당 연산자에 대한 기본 구현을 제공한다는 점을 생각해보면 대부분 클래스 타입은 컨테이너 이용 조건을 만족한다. operator<()T의 정의에 포함되지 않았다. 따라서 operator<()를 정의하지 않은 타입의 객체는 map이나 set 같은 연관 컨테이너에서 키로 사용할 수 없으며 보다 작은(<) 연산을 지원하지 않는 원소들을 담은 순차 컨테이너에는 sort()merge() 같은 정렬 알고리즘을 적용할 수 없다.

Note ≣

자신이 만든 객체의 타입이 사용하려는 컨테이너의 사용 조건을 만족하지 않거나 컨테이너 템플릿을 어떤 방식으로든 잘못 사용하고 있다면 표준 라이브러리 헤더 파일 깊은 곳에 있는 코드에서 비롯된 컴파일러 오류 메시지를 종종 보게 될 것이다. 이런 일이 일어났을 때 표준 라이브러리에 오류가 있다고 보고하려 하지 마라. STL이 아니라 STL을 사용하는 자신의 코드에서 문제를 찾아봐야 한다!

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.