※ std::list 요약
std::list는 double linked list(이중 연결 리스트)라는 자료구조를 이용하여 만든 시퀀스 컨테이너다.
템플릿 기반이므로 임의 타입을 요소로 가질 수 있으며, 요소 개수에 따라 동적으로 메모리를 관리한다.
double linked list로 되어 있기에 double linked list의 특징을 거의 그대로 가지고 있으며 linked list 자료구조에 대한 이해가 있어야 알맞는 상황에 알맞게 사용할 수 있다. 필자는 std::list를 거의 사용하지 않는다. 나뻐서 안 사용한다기 보다는 std::vector로도 충분한 상황이 대부분이기 때문이다.

※ std::list 특징

- 고정 길이인 배열에 비해 길이가 가변적이다.
- std::vector와 달리 데이터의 중간 삽입, 중간 삭제 속도가 빠르다.
- 데이터 중간 삽입, 삭제시 요소 개수에 상관없이 동일한 상수시간이 소요된다.(상수 시간 복잡도의 수행 성능 보장)

- list의 순회 속도는 O(n), 즉 요소 개수가 많을 수록 순회 속도는 느리다.

- 각 노드는 앞쪽, 뒤쪽 노드와 연결된 이중 연결 리스트다.(반대는 std::forward_list로써, 단일 연결 리스트다)

- 노드 기반이므로 []나 at()을 지원하지 않는다.

 

※ std::list를 사용해야 하는 경우

- 저장할 데이터의 개수가 가변적일때
- 저장된 요소를 자주 검색하지 않을때
- 중간에 데이터 삽입, 삭제가 자주 발생할때
- 랜덤 엑세스를 자주 안할때

 

'STL - Containers > list' 카테고리의 다른 글

[C++ STL] std::list 주요 멤버 함수 목록  (0) 2015.11.25

※ std::vector 요약
필자가 std::map과 함께 가장 많이 사용하는 시퀀스 컨테이너 std::vector에 대한 설명이다.
std::vector는 동일 타입의 자료 집합으로써 흔히 배열에 비유를 많이 한다.
또한 템플릿 기반이므로 임의 타입을 요소로 가질 수 있으며, 요소 개수에 따라 동적으로 메모리를 관리한다.
다른 컨테이너들에 비해 구조가 단순하고 사용 방법이 쉬우며 속도도 빠른편이다, 또 실용적이라 활용 빈도가 높다.

※ std::vector의 특징
- 배열을 대체할 수 있다.
- 동일 타입의 자료 집합이며 각 요소는 연속된 위치에 배치된다.
- 연속된 위치에 배치되므로 임의 위치를 빠른 속도로 액세스 할 수 있다.
- 최상위 레벨의 임의 접근 반복자를 제공하므로 STL의 거의 모든 알고리즘 사용 가능하다.
- 삽입, 삭제 속도가 느리다. 중간 삽입, 삭제는 더 느리다.

※ std::vector와 배열
- 배열의 크기는 고정이지만 std::vector는 요소 개수에 따라 자동(동적)으로 늘어난다.
- 배열과 std::vector 모두 사용 방법이 쉽다.
- 배열과 std::vector 모두 데이터를 연속된 위치에 순차적으로 저장한다.
- 연속된 위치에 순차적으로 저장하므로 랜덤 엑세스가 가능하다.
- 속도는 보통 배열이 std::vector보다 빠르다.
 
※ std::vector를 사용해야 하는 경우

- 저장할 데이터의 개수가 가변적일때
- 중간에 데이터 삽입, 삭제가 적거나 없을때
- 저장된 요소를 자주 검색하지 않을때
- 랜덤 엑세스를 자주 할때


 

STL이란 자료 구조와 알고리즘을 템플릿으로 제공하는 C++ 표준 라이브러리로써, Standard Template Library의 약자입니다.


STL의 주요 구성 요소는 컨테이너, 할당기, 반복자, 어댑터, 알고리즘, 함수 객체로 이뤄져 있으며, 컨테이너, 알고리즘, 반복자가 가장 중요한 세 요소입니다.


STL의 특징으로는 이름과 같이 일반화를 지원한다는 것과 광범위하게 이곳저곳에 두루두루 재사용 될 수 있다는 것입니다. 그 와중에도 (적재적소 사용시)효율은 떨어지지 않으며 표준이므로 이식성에도 좋고 다양한 자료구조와 알고리즘을 최적화하여 사용자가 쓰기 좋게 만들어 놓았으며 해당 알고리즘이 내부적으로 어떻게 동작하는지 몰라도 사용할 수 있는 특징들이 있습니다.


STL의 단점으로는 템플릿에 기반 하기 때문에 타입마다 함수와 클래스가  매번 구체화 되어 코드가 비대해 지며 템플릿 클래스의 타입명이 길어 재빠른 의미 파악이 힘듭니다.


STL을 사용하는 이유는 특징에도 적혀 있듯이 이곳저곳 광범위하게 재사용이 가능하며 검증된 코드의 사용으로 시간을 절약할 수 있고 목적에 맞게 잘만 사용한다면 효율도 좋기 때문입니다.

+ Recent posts