[C++ STL] List

2021. 4. 13. 21:53

1. List ?

  • 이중 연결 리스트 (doubly linked list)
  • Sequence container로 순서를 유지하는 구조
  • vector, deque와 다르게 멤버 함수로 정렬(sort, merge), 이어 붙이기(splice) 가능
  • 임의접근 반복자(at) 사용 불가, 양방향 반복자 사용 가능

 

2. 사용법

list 생성자

#include <list>

list<int> lt;
list<int> lt(7);	// 0으로 초기화 된 원소 7개를 가진 list 생성
list<int> lt(3, 5);	// 5로 초기화 된 원소 3개를 가진 list 생성
list<int> lt1(lt2);	// l1을 l2로 복사

 

list 멤버함수

int x;

lt.assign(3, 4);	// list에 4로 초기화된 3개의 원소 할당

lt.front();
lt.back();
lt.begin();
lt.end();

// 역순으로 접근 
lt.rbegin();	
lt.rend();

lt.push_back(x);	// 뒤쪽으로 원소 삽입
lt.push_front(x);	// 앞쪽으로 원소 삽입
lt.pop_back(x);	// 마지막 원소 제거
lt.pop_front();	// 첫번째 원소를 제거

lt.insert(iter, x);
lt.erase(iter);
lt.size();

//100과 200사이이면 true 
bool predicate(int num){
    return num>=100 && num<=200;
}
lt.remove(x);	// x와 같은 원소 모두 제거
lt.remove_if(predicate);	// predicate 함수가 참이면 제거

lt.reverse();	// 원소 순차열 반전
lt.sort();	// 오름차순 정렬
lt.unique();	// 인접한 원소가 같으면 중복 제거 (sort를 먼저 거쳐야 유용)

lt2.swap(lt1);
lt2.splice(iter2, lt1);	// lt2에서 iter2이 가리키는 곳에 lt1의 모든 원소를 잘라 붙임
lt2.splice(iter2, lt1, iter1);	// lt2의 iter2가 가리키는 곳에 lt1의 iter1이 가리키는 원소를 잘라 붙임
lt2.splice(iter2, lt1, first1, last1);	// lt2의 iter2가 가리키는 곳에 lt1의 [first1 , last1) 까지의 원소를 잘라 붙임
lt2.merge(lt1);	// lt1을 lt2내부로 합병 정렬 (default는 오름차순)

+ Recent posts