컨테이너란?
무엇인가를 담을 수  있는 공간 으로 봐도 될듯 싶다.

왜 적재적소에 사용 해야 하나?
컨테이너마다 적재하는 방법에 차이를 두고 있기 때문이다.


컨테이너는 어떤 종류가 있나?
여러것들이 있지만 표준 STL만 다룬다루도록 하고, 크게 시퀸스(sequence) 컨테이너( vector, string, deque, list ) 와 연관(associative) 컨테이너( set, multiset, map, multimap )로 나눌수가 있다.


이 책에선 어떨때 어떤 컨테이너를 선택하는지 질문 형식으로 유도 하고 있다. 그 질문을 적어 본다.
1. 컨테이너의 아무 위치에 요소를 삽입할 수 있어야 하나?
맞다면 시퀸스 컨테이너 중에서 선택해야 한다.

2. 컨테이너 내의 요소들의 순서 결정에 직접 관여하고 싶나?
맞다면 map, multimap, set, multiset 등이 좋다.

3. 임의 접근 반복자가 필요 한가?
맞다면, vector, deque, string 이 좋다.

4. 요소 삽입이나 삭제시 다른 컨테이너 요소들이 밀려나는 일이 없어야 하는가?
맞다면, 노드 기반 컨테이너가 좋으며, 표준 STL 에선 list 가 좋다.

5. 컨테이너 내의 데이터가 C의 데이터 타입과 메모리 배열 구조적으로 호환되어야 하는가?
맞다면, vector 가 딱이다.

6. 탐색 속도가 가장 빨라야 하는가?
표준 컨테이너에선 요소단위로 vector 가 가장 좋다. (map 류도 좋긴 하나, 특정 키가 있어야 하므로 제외)

7. 삽입과 삭제 동작이 안정적이여야 하는가?
맞다면 list가 제일 좋다.

8. 반복자, 포인터, 참조자가 무효화 되는 일이 없어야 하는가?
맞다면, 노드기반 컨테이너를 선택해야 한다.

9. 임의 접근 반복자를 지원하는 시퀸스 컨테이너가 필요한데, 요소 삭제가 일어나지 않고 요소 삽입이 컨테이너끝에서만 일어나는 한, 포인터와 참조자가 무효화되지 않아야 하는가?
맞다면, deque가 정답니다.


이게 전부는 아니지만, 각각 어떤 특성들이 있는지 알아 간다면 더우 좋은 컨테이너 선택을 할수 있게 될 것이다.




  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기