STL 컨테이너
: 데이터를 모아서 저장해둘 수 있는 제네릭 데이터구조
항목 데이터를 값으로서 취급한다. 값 시맨틱을 적용하여 항목이 삽입될 때 항목을 복제해서 저장하고 외부에서 항목을 룩업할 때도 저장된 항목을 복제하여 넘겨준다.
디폴트 할당자와 비교자가 사용될 때, 컨테이너에 저장되는 항목이 가져야 할 상세 요건
1. 복제 생성자
: 원본과 같은 복제 항목을 만든다. 항목을 삽입하 때마다 매번 호출된다.
2. 이동 생성자
: 원본 항목의 내용물을 이동시킴으로써 새로운 항목을 만든다. 새로운 항목을 생성한 후 원본 항목이 소멸할 때 이용된다.
3. 대입 연산자
: 원본 항목의 복제를 통해 기존 항목의 내용물을 대체한다. 항목을 수정할 때마다 사용된다.
4. 이동 대입 연산자
: 원본 항목의 내용물을 다른 항목으로 이동시킨다. 대입 연산 후 원본 항목이 소멸할 때 이용된다.
5. 소멸자
: 항목을 삭제한다. 컨테이너에서 항목을 제거할 때마다 호출된다.
6. 디폴트 생성자
: 아무런 인자 없이 항목을 생성한다.
7. operator==
: 두 항목이 같은지 비교한다.
8. operator<
: 두 항목의 값의 크기를 비교한다.
반복자
: 컨테이너의 항목에 범용적인 접근 방법을 제공하기 위한 패턴
모든 반복자는 복제 생성자, 복제 대입 연산자, 소멸자를 지원해야한다
typedef로 정의된 반복자 타입에는 iterator, const_iterator, 역방향
순회를 지원하는 reverse_iterator, const_reverse_iterator가 있다.
컨테이너는 반복자를 얻을 수 있도록 begin() 메서드와 end() 메서드를 제공한다.
begin() - 첫 번째 항목에 접근하는 반복자를 리턴
end() - 마지막 항목을 한 단계 지나친 반복자를 리턴
vector
: 항목들은 연속된 메모리에 저장되고, 자신만의 슬롯을 할당받는다.
vector의 항목은 인덱스로 접근할 수 있고, 마지막이나 중간에 새로운 항목을 삽입할 수도 있다.
템플릿 클래스로 항목 타입과 할당자 타입등 두개의 타입 파라미터를 템플릿 인자로 받는다.
크기가 동적으로 커질 수 있다.
디폴트 생성자는 0개의 항목을 가지는 vector를 생성한다.
ex) vector<int> intVector; // 항목 개수가 0인 int 타입 vector 생성
추가로 항목의 초기값을 지정할 수 있다.
ex) vector<int> intVector(10, 100); // 항목 개수가 10개, 값이 100
인 int 타입 vector 생성
vector의 복제 연산자와 대입 연산자는 저장된 항목에 대해 깊은 복제를 하도록 되어있다.
vector 객체를 전달할 때는 참조형 또는 const 참조형으로 전달하여 복제 오버헤드를 피해야한다.
assign() - 현재 저장된 항목을 모두 삭제하고 개수에 상관없이 새로운항목을 추가할 수 있다.
객체를 재활용할 때 유용하다.