사용자 정의 STL 컨테이너 작성 지침
STL 규칙을 준수하는 새 컨테이너를 디자인할 때는 특정 지침을 따르는 것이 중요합니다. 올바른 동작과 STL 라이브러리와의 통합을 보장합니다.
Iterator 인터페이스:
- input_iterator_tag,output_iterator_tag,forward_iterator_tag,bidirection_iterator_tag,random_access_iterator_tag와 같은 적절한 iterator_category 태그를 사용하여 반복자 클래스를 정의합니다.
- 비교를 위한 멤버 함수 제공(= =, !=), 증가/감소( , --), 산술( , -) 및 역참조(*, ->) 작업.
Const Iterator:
- const_iterator 제공 반복자 클래스 내에 중첩된 클래스로, 상수 컨테이너에 대한 반복을 허용합니다.
- 비상수와 동일한 멤버 함수를 정의합니다. 반복자이지만 const 참조와 포인터가 있습니다.
비교 및 할당:
- 비교 연산자 구현(==, !=, , =) 컨테이너 자체에 대한 것입니다.
- 다른 컨테이너에 대한 참조를 취하는 할당 연산자를 제공하세요. 컨테이너.
용량 및 액세스:
- 컨테이너 크기를 관리하려면 empty(), size(), max_size()와 같은 멤버 함수를 포함하세요. 및 용량.
- begin(), end(), cbegin(), cend(), rbegin(), rend() 제공 컨테이너의 요소를 나타내는 반복자에 액세스하기 위한 crbegin() 및 crend().
- 요소에 액세스하거나 수정하려면 front(), back(), at() 및 Operator[]와 같은 함수를 정의합니다.
삽입 및 삭제:
- 구현 요소 삽입 및 삭제를 위한 emplace_front(), emplace_back(), push_front(), push_back(), pop_front() 및 pop_back().
- emplace(), insert() 및 erase() 멤버 제공 요소를 삽입하고 제거하는 함수 컨테이너.
기타:
- 같은 유형의 두 컨테이너의 내용을 교환하려면 swap() 멤버 함수를 포함합니다.
- get_allocator()를 구현하여 컨테이너와 연결된 할당자를 검색합니다.
- 독립형 swap()을 정의합니다. 동일한 유형의 컨테이너를 교체하는 함수입니다.
테스트:
컨테이너의 신뢰성을 보장하려면 제공된 테스터 클래스와 같은 테스트 클래스를 사용하세요. 다음을 확인하십시오:
- 객체 수명이 적절하게 관리됩니다.
- 함수 호출이 객체의 상태를 수정하지 않습니다. 예기치 않게 발생했습니다.
- 전역 개체를 사용하거나 사용하지 않고 생성된 경우 컨테이너가 올바르게 작동합니다.