◎ 링크 재배치
- 리스트에는 링크 재치의 장점을 살리수 있는 여러가지 함수가 준비되어 있다.
ㅇ void swap(list& Right);
- 실제 요소를 교환할 필요 없이 리스트끼리 head, tail 정보만 바꾼다. ==> 속도 상승
ㅇ void reverse()
- 요소들을 꺼구로 재배치하여 일일 옮길 필요없이 next, prev 링크를 반대로 바꾼다.
ㅇ void merge(list& Right)
- 리스트끼리 병합하는 merge는 링크를 조작하여 한쪽 리스트를 다른쪽의 끝과 연결한다
※ swap, reverse, merge 이 함수는 일반함수로도 제공되지만, 멤버함수로 제공되는 이유는 리스트의 특성을 이용하여 하기때문에 일반함수보다 훨씬 빠르다.
ㅇ splice 함수
- splice 의미 : 새끼줄 같은 것을 꼬아서 서로 잇는다.
- 두 개의 리스트를 서로 잇거나 한쪽 요소들을 뽑아서 다른 쪽으로 이동시킨다.
- void splice(iterator it, list& x); : it위치에 list x를 이동, 호출 객체가 자신이면 X
- void splice(iterator it, list& x, iterator first); : it 위치에 list의 first만 이동시킴(요소 하나만), 호출 객체가 자신이어도 허용
- void splice(iterator it, list& x, iterator first, iterator last); : 범위 안에 있는 것을 이동, 호출 객체가 자신이어도 허용
- splice 예제
1 #include <iostream>
2 #include <list>
3 using namespace std;
4
5 template <typename C>
6 void dump(const char *desc, C c) 7 {
8 cout.width(12);
9 cout << left << desc << "==> " ;
10 copy(c.begin(), c.end(), ostream_iterator<typename C::value_type>(cout," "));
11 cout << endl;
12 }
13
14 void main()
15 {
16 const char *alpha = "abcdefghij";
17 const char *num = "12345";
18 list<char> la(&alpha[0], &alpha[10]);
19 list<char> ln(&num[0], &num[5]);
20 list<char>::iterator ita, it1, it2;
21
22 dump("알파벳", la);
23 dump("숫자", ln);
24 ita = la.begin();
25 ita++;
26 ita++;
27
28 it1 = ln.begin();
29 it1++;
30 it1++;
31
32 it2 = ln.end();
33 it2--;
34 it2--;
35
36 /// 전체이동
37 la.splice(ita, ln);
38
39 ///앞쪽2번쨰만이동
40 //la.splice(ita, ln, it1);
41
42 // 구간이동
43 //la.splice(ita,ln, ln.begin(), ln.end() );
44
45 dump("알파벳", la);
46 dump("숫자", ln);
47
48
49 }
- 전체이동
- 구간이동
ps : 출처 및 자세한 내용은 www.WinAPI.co.kr 참고
'[ C/ C++ 프로그래밍 ] > [ STL ]' 카테고리의 다른 글
[ 혼연 정리 ] 연관 컨테이너 - 1 [ 셋 ] (3) | 2010.06.24 |
---|---|
[ 혼연 정리 ] 시퀀스 컨테이너 - 9 [ 리스트 ] (0) | 2010.06.24 |
[ 혼연 정리 ] 시퀀스 컨테이너- 7 [ 리스트 ] (0) | 2010.06.24 |
[ 혼연 정리 ] 시퀀스 컨테이너- 6 [ 리스트 ] (0) | 2010.06.24 |
[ 혼연 정리 ] 시퀀스 컨테이너 - 5 [ 벡터 ] (1) | 2010.06.24 |