Page 15 -
P. 15

행 시간에 조절할 수 없다. 메모리 사용량을 최소화하도록 성능을 최적화한 것이다. std::vector
                    는 새로운 원소를 맨 뒤에 추가하는 반면, std::deque는 원소를 맨 앞에도 추가할 수 있다.
                    std::list는 이중 연결 리스트(doubly-linked list)이고, std::forward_list은 단일 연결 리스트          1

                    (singly-linked list)다. 둘 다 컨테이너에서 임의의 지점에 매우 빠르게 접근하도록 최적화됐다.
                    연관 컨테이너(associative container)는 키-값 쌍으로 구성된 컨테이너로, 주어진 키에 대해 값을                   표준 라이브러리
                    제공하는 형태로 구성된다. 연관 컨테이너는 이름을 키로 입력하면 전화번호를 알려주는 전화번

                    호부 같은 기능을 구현하는 데 주로 사용된다. C++는 여덟 가지 연관 컨테이너를 제공하며, 정
                    렬 연관 컨테이너와 비정렬 연관 컨테이너로 분류한다. 정렬 연관 컨테이너는 키를 기준으로 정
                    렬하며 std::set, std::map, std::multiset, std::multimap 등이 있고, 비정렬 연관 컨테이너는

                    std::unordered_set, std::unordered_map, std::unordered_multiset, std::unordered_multimap
                    등이 있다.
                    먼저 정렬 연관 컨테이너(ordered associative container)부터 살펴보자. std::set은 키에 연관된 값

                    이 없고, std::map은 키에 연관된 값이 있다. std::map은 키가 고유하지만 std::multimap은 키가
                    중복될 수 있다. 이러한 속성은 비정렬 연관 컨테이너(unordered associative container)에도 그대로
                    적용되며, 정렬 연관 컨테이너와 비슷한 점이 많다. 가장 큰 차이는 성능이다. 정렬 연관 컨테이

                    너의 접근 시간은 원소의 개수에 대해 로그 함수로 증가하지만, 비정렬 연관 컨테이너는 접근 시
                    간이 일정하다. 즉, 비정렬 연관 컨테이너의 접근 시간은 크기와 관계가 없다. std::map의 속성
                    은 std::vector와 비슷하다. 연관 컨테이너를 사용하는 경우의 95%는 키를 기준으로 정렬하는
                    std::map이 적합하다.

                    컨테이너 어댑터(container adapter)는 순차 컨테이너에 대한 간편한 인터페이스를 제공한다. C++
                    는 std::stack, std::deque, std::priority_queue를 제공한다.

                    반복자는 컨테이너와 알고리즘을 연결해준다. 반복자는 컨테이너에 의해 생성되며 범용 포인터로
                    구성된다. 반복자는 컨테이너에 대한 반복문을 임의의 위치를 기준으로 정방향 또는 역방향으로

                    진행하는 데 사용된다. 반복자의 종류는 컨테이너마다 다르다. 반복자 어댑터(iterator adapter)를
                    사용하면 스트림에 직접 접근할 수 있다.

                    STL은 알고리즘을 100개 이상 제공한다. 순차, 병렬, 병렬 및 벡터 중에서 원하는 실행 정책
                    (execution policy)에 따라 거의 모든 알고리즘을 구동할 수 있다. 알고리즘은 원소 또는 원소 범위
                    에 대해 작동한다. 범위(range)는 시작 지점을 가리키는 시작 반복자(begin iterator)와 끝 지점을 지
                    정하는 끝 반복자(end iterator)로 지정한다. 참고로 끝 반복자는 범위 끝에 해당하는 원소가 아니

                    라, 그다음 지점을 가리킨다는 점에 주의한다.


                                                                                                  31





     c++_06.indd   31                                                                        2021-11-19   오전 9:25:42
   10   11   12   13   14   15   16   17   18   19   20