본문 바로가기

프로그래밍/C++

STL컨테이너에 저장되어야할 항목과 반복자

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() - 현재 저장된 항목을 모두 삭제하고 개수에 상관없이 새로운항목을 추가할 수 있다. 
객체를 재활용할 때 유용하다.

'프로그래밍 > C++' 카테고리의 다른 글

C++ 기초  (0) 2019.03.28
코드의 재사용성  (0) 2019.03.19
객체지향과 클래스  (0) 2019.03.12
보기 좋은 코드의 중요성과 코드의 디자인  (0) 2019.03.09
auto, decltype, 문자열  (0) 2019.03.08