◎ 리스트
- 이중 연결 리스트를 탬플릿으로 추상화한 버전
- 동일한 자료의 집합을 관리
- 용도면에서 벡터와 같고 서로 대체 가능 ==> 주요 멤버함수의 원형 일치, 대입,비교등의 연산자도 동일
- 리스트의 반복자는 링크를 가리키는 포인터 ( 벡터의 반복자는 요소를 직접 가리키는 포인터)
ㅇ 벡터와 리스트의 주요 차이점
① 반족자의 레벨 (가장 큰차이점) => 리스트 양방향, 벡터는 임의 접근
- []연산자, at함수, sort, binary_search 사용 X
② 링크만 조작해서 삽입, 삭제 수행
- 제일 앞에 요소 삽입, 삭제하는 push_front, pop_front 제공
- capacity, reserve 불필요 -> 크기를 처음부터 정할 필요 없음
③ 링크 구조로 인해 메모리 소모량은 벡터 보다 훨씬 많다.
- 노드는 무조건 동적할당, 요소간의 순서를 기억하기 위한 링크도 별로의 메모리를 소모,
- 삽입,삭제시 마다 노드를 할당, 해제하는 과정을 반복하므로 메모리 단편화 심함 ==> 시스템의 메모리 관리 능력에도 좋지 않은 영향
④ 삽입,삭제에 의해 요소들의 물리적인 위치가 바뀌지 않으므로 반복자의 무효화는 되지 않음
- 무효화가는 되는 경우는 반복자가 가리키는 대상을 삭제 했을 경우(완전히 사라졌을경우)
※ 벡터는 읽기에 강하고, 리스트는 쓰기에 강함, 읽기 속도는 벡터, 삽입,삭제는 리스트가 더 좋다.
ㅇ 생성자
- explicit list(); /// 디폴트 생성자
- explicit list(size_type n, const T& v = T() ) /// v값 n개를 가지는 생성자
- list(const list& x); /// 복사 생성자
- list(const_iterator first, const_iterator last); /// 구간 복사 생성자
※ 할당기는 원형에서 생략, 리스트는 실행중 크기를 얼마든지 늘릴수 있음으로 통상적으로 빈 리스트(디폴트)를 생성함
- list 예)
1 #include <iostream>
2 #include <list>
3 using namespace std;
4
5
6 void main()
7 {
8 /// 디폴드생성자생성
9 list<int> li;
10
11 list<int>::iterator it;
12
13 li.push_back(8);
14 li.push_back(9);
15 li.push_front(7);
16 li.push_front(6);
17
18 for ( it = li.begin() ; it != li.end() ; it++)
19 printf("%d \n",*it);
20
21 }
ps : 출처 및 자세한 내용은 www.WinAPI.co.kr 참고
'[ C/ C++ 프로그래밍 ] > [ STL ]' 카테고리의 다른 글
[ 혼연 정리 ] 시퀀스 컨테이너 - 8 [ 리스트 ] (2) | 2010.06.24 |
---|---|
[ 혼연 정리 ] 시퀀스 컨테이너- 7 [ 리스트 ] (0) | 2010.06.24 |
[ 혼연 정리 ] 시퀀스 컨테이너 - 5 [ 벡터 ] (1) | 2010.06.24 |
[ 혼연 정리 ] 시퀀스 컨테이너 - 4 [ 벡터 ] (0) | 2010.06.24 |
[ 혼연 정리 ] 시퀀스 컨테이너 - 3 [ 벡터 ] (0) | 2010.06.24 |