컨테이너란?
무엇인가를 담을 수 있는 공간 으로 봐도 될듯 싶다.
왜 적재적소에 사용 해야 하나?
컨테이너마다 적재하는 방법에 차이를 두고 있기 때문이다.
컨테이너는 어떤 종류가 있나?
여러것들이 있지만 표준 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가 정답니다.
이게 전부는 아니지만, 각각 어떤 특성들이 있는지 알아 간다면 더우 좋은 컨테이너 선택을 할수 있게 될 것이다.
무엇인가를 담을 수 있는 공간 으로 봐도 될듯 싶다.
왜 적재적소에 사용 해야 하나?
컨테이너마다 적재하는 방법에 차이를 두고 있기 때문이다.
컨테이너는 어떤 종류가 있나?
여러것들이 있지만 표준 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가 정답니다.
이게 전부는 아니지만, 각각 어떤 특성들이 있는지 알아 간다면 더우 좋은 컨테이너 선택을 할수 있게 될 것이다.
'책 정리 > Effective STL' 카테고리의 다른 글
항목 10 : 할당자(allocator)의 일반적인 사항과 제약 사항에 대해 잘 알아 두자. (2) | 2008.07.14 |
---|---|
항목 9 : 데이터를 삭제할 때에도 조심스럽게 선택할 것이 많다. (0) | 2008.07.13 |
항목 8 : auto_ptr의 컨테이너는 절대로 만들지 말자. (0) | 2008.07.13 |
항목 7 : new로 생성한 포인터의 컨테이너를 사용할 대에는 컨테이너가 소멸되기 전에 포인터를 delete하는 일을 잊지 말자. (0) | 2008.07.13 |
항목 6 : C++ 컴파일러의 어이없는 분석 결과를 조심하자. (0) | 2008.07.13 |
항목 5 : 단일 요소를 단위로 동작하는 멤버 함수보다 요소의 범위를 단위로 동작하는 멤버 함수가 더 낫다. (0) | 2008.07.13 |
항목 4 : size()의 결과를 0과 비교할 생각이라면, 차라리 empty를 호출하자 (0) | 2008.07.12 |
항목 3 : 복사(copy)는 컨테이너 안의 객체에 맞게 비용은 최소화하며, 동작은 정확하게 하자. (0) | 2008.07.12 |
항목 2: "컨테이너에 독립적인(container-independent) 코드"라는 환상을 조심하자. (0) | 2008.07.12 |
Effective STL 목차 및 링크 (0) | 2008.07.11 |
최근댓글