본문 바로가기

C++ Programming/STL

LIST

1. 이중링크드 리스트처럼 자신의 원소들을 관리하며 랜덤 액세스를 지원하지 않는다. 
    하지만 어떠한 위치에서건 삽입과 삭제가 빠르게 이루어진다.
 
2. []연산자와 at()을 제공하지 않는다. 용량과 재할당과 관련된 함수는 제공하지 않는다. 

3. 원소액세스 방법
   c.front() - 첫번째원소
   c.back() - 마지막 원소

4. 반복자 함수
   c.begin(), c.end(), c.rbegin(),crend()

5. 원소의 삽입 및 제거가 따로 멤버함수로서 제공된다.  
   remove(val) : val인 모든 원소를 제거한다. 
   remove_if(op) : op(elem)가 true를 반환하는 모든 원소를 제거한다. 
   ex) 값이 짝수인 모든 원소들을 제거한다.
        remove_if(not1(bind2nd(modules<int>(),2)));

6. 스플라이스 함수 
   c.splice(pos,c2); //모든 원소들을 pos 위치로 이동한다.
   c.splice(pos,c2,c2pos); //c2pos에 있는 원소를 c1의 pos위치로 이동한다.
   c.splice(pos,c2,c2beg,c2end);//범위의 원소들을 c1의 pos위치 앞으로 이동한다.
   c.sort() //정렬
   c.sort(op) //op를 정렬기준으로 정렬한다. 
   c.merge(c2) //합병한다. c2->c으로 이동
   c.merge(c2,op) //정렬기준op를 의해 정렬되어 있다는 기준하에 합병한다. c2->c으로 이동
   c.reverse() //모든 원소들의 순서를 뒤바꾼다.

ex) 리스트를 활용한 예제

list<int> list1,list2;

for(int i=0;,i<6;++i){
 list1.push_back(i);
 list2.push_front(i);
}

//list2에서 값을 3으로 가지는 원소의 위치에 list1dml 모든 원소들을 삽입한다.
//find()는 값이 3인 최초의 원소를 위치를 반환한다.
list2.splice(find(list2.begin(),list2.end(), //목적지 위치
                 3),
                 list1); //소스 list

//첫번째 원소를 마지막으로 이동시킨다.
list2.splice(list2.end(),  //목적지 위치
                list2,              //소스 list
                list2.begin());  //소스 위치

//list2를 정렬한 후 list1에 할당한다. 그리고 나서 list2의 중복된 값들을 제거한다.
list2.sort();
list1 = list2;
list2.unique();

//list2를 list1에 병합한다.
list1.merge(list2);