본문 바로가기
프로그래밍 언어/C++

[C++] [STL] List

by 까망 하르방 2021. 7. 30.
반응형

List

- 헤더파일: #include <list>

Vector가 배열 기반이었다면 List는 노드 기반이다.

- 이중 연결리스트로 구현되어 있다.

   그렇기에 원소 중간 삽입시에도 효율적이다. (앞/뒤/중간 추가 가능)

▶ 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 

 

[List] 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교

순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 List를 구현하는 방법에는 순차 리스트(배열), 연결 리스트 존재한다.    ※ 관련 연산: 삽입(insert), 접근(access) 및 탐색(search), 삭제(delete) 각

zoosso.tistory.com

 

관련 함수

- push_back(val): 뒤쪽에 val 원소 추가

- pop_back(): 뒤쪽 원소 제거

- push_front(val): 앞쪽에 val 원소 추가

- pop_front(): 앞쪽 원소 제거

- clear(): 리스트 비우기

- sort() : 오름차순으로 정렬 시켜준다.

              greater를 사용하면 내림차순 정렬도 가능

- unique(): 연속되는 중복된 원소 제거

                  중복 원소를 제거하려면 정렬을 먼저한 후 unique 실행해야 한다.

#include <iostream>
#include <list>

using namespace std;

int main() {
       list<int> list;
       list.push_back(1);   // [ 1 ]
       list.push_front(3);  // [ 3, 1]
       list.push_back(2);   // [ 3, 1, 2]
       list.push_front(4);  // [ 4, 3, 1, 2]
       list.push_back(3);   // [ 4, 3, 1, 2, 3]
       list.push_back(5);   // [ 4, 3, 1, 2, 3, 5]
       list.pop_front();    // [ 3, 1, 2, 3, 5]
       list.pop_back();     // [ 3, 1, 2, 3]
       // 내림차순 정렬
       list.sort(greater<int>()); // [3, 3, 2, 1]
       for (auto i : list)
       {
              cout << i << " ";
       }
       cout << endl;
       // 연속하는 중복된 원소 제거
       list.unique();       
       for (auto iter = list.begin(); iter != list.end(); iter++)
       {
              cout << *iter << " ";
       }
       cout << endl;
}

 

연속되지 않은 상태에서 unique() 하는 경우에는

중복 원소가 모두 처리되지 않는 것을 확인할 수 있다.

#include <iostream>
#include <list>

using namespace std;

int main() {
       list<int> list;
       list.push_back(1); list.push_back(1);
       list.push_back(3);
       list.push_back(1); list.push_back(1);
       list.push_back(2);
       list.push_back(1); list.push_back(1); list.push_back(1);

       for (auto i : list)
       {
              cout << i << " ";
       }
       cout << endl;

       // ----------------------------------
       list.unique();
       for (auto i : list)
       {
              cout << i << " ";
       }
       cout << endl;

       // ----------------------------------
       list.sort();
       list.unique();
       for (auto i : list)
       {
              cout << i << " ";
       }
       cout << endl;
}

 

반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C++] [STL] bitset  (0) 2021.08.01
[C++] [STL] Priority_queue (feat. 여러 기준으로 우선순위 큐 구현해보기)  (0) 2021.08.01
[C++] [STL] Deque  (0) 2021.07.30
[C++] [STL] multiset  (0) 2021.07.30
[C++] [STL] Set  (0) 2021.07.29

댓글