Programming Language/C++

[C++] STL list

LeeJaeJun 2024. 1. 15. 22:51
728x90
반응형
  • #include <list> 헤더파일에 존재한다.
  • double linked list
  • vector, deque와 다르게 멤버 함수에서 정렬(sort, merge), 이어붙이기(splice)가 있다.
  • 임의접근 반복자 at(), [] 등으로 접근 불가. Iterator를 통해 하나씩 접근해야 한다.(양뱡향 반복자 ++, -- 사용하여 탐색)
  • 연산자( ==, != , <, >, <=, >=) 사용가능
  • using namespace std; 선언했다고 가정
생성자  
list <Data Type> 변수이름 비어있는 list 컨테이너 생성
ex) list<int> li;

ex) list<string> li;
list li(10); default값(0)으로 초기화된 원소 10개를 가지는 list 생성
list li(3, 2); 2로 초기화된 원소 3개를 가지는 list 생성
list li2(li1); list li1을 li2로 복사
멤버 함수  
li.assgin(3, 4) 4로 초기화된 3개의 원소로 초기화.(리스트를 지정된 값으로 초기화).
이 메소드는 리스트를 비워버리고, 그 크기를 3으로 만들고 모든 원소를 4로 설정합니다.
li.front() 맨 앞의 원소를 반환
li.back() 맨 뒤의 원소를 반환
li.begin() 리스트의 첫 번째 원소를 가리키는 Iterator를 반환 (정방향 반복자)
ex) list<int>::iterator it; it = li.begin()
li.end()  컨테이너의 끝을 나타내는 Iterator를 반환 (정방향 반복자)
ex) list<int>::iterator it, it == li.end()
li.rbegin() 리스트의 역순으로 첫 번째 원소를 가리키는 반복 (역방향 반복자)
* 가리키는 대상의 값만 보면 end와 같지만 정방향 반복자는 정방향 반복자끼리, 역방향 반복자는 역방향 반복자끼리 사용해야 한다. 그렇기에 역순으로 탐색하고 싶을 때 사용하는 것이다.
ex) std::list<int>::reverse_iterator rit, rit == li.rbegin()
li.rend() 컨테이너의 역순 끝을 나타내는 반복자를 반환
ex) std::list<int>::reverse_iterator rit, rit == li.rend()
li.push_back(k) 리스트의 가장 뒤에 k를 추가
li.pop_back() 리스트의 맨 마지막 원소 제거
li.push_front(k) 리스트의 맨 앞에 k를 추가
li.pop_front() 리스트의 맨 첫번째 원소 제거
li.insert(iter, k) 반복자 iter가 가리키는 값에 k를 삽입
삽입한 원소를 가리키는 Iterator 반환
* index 위치가 아니라 iterator가 첫번째 인수로 들어가야 한다
li.erase(iter) 반복자 iterator가 가리키는 원소를 삭제
삭제한 원소의 다음 원소를 가리키는 Iterator 반환
li.empty() list가 비어있는 지 판단
li.clear() list 초기화
li.size() list의 사이즈 반환
li.remove(k) list 안에 k와 같은 값을 가지는 원소를 모두 제거
li.remove_if(predicate) 단항 조건자 predicate에 해당하는 원소 모두 제거
li.reverse() 원소들의 순서를 역순으로 뒤집는다
li.sort() default(오름차순)으로 정렬
li2.swap(li1) li2와 li1을 바꾼다
li2.splice(iter2, li1) li2의 iter2가 가리키는 위치부터 li1의 모든 원소를 잘라 붙인다
li2.splice(iter2, li1, iter1) li2의 iter2가 가리키는 위치부터 li1의 iter1이 가리키는 위치부터 잘라 붙인다
li2.splice(iter2, li1, iter1_1,
iter1_2)
li2의 iter2가 가리키는 위치부터 li1의 iter1이 가리키는 위치부터 iter2가 가리키는 위치까지 잘라 붙인다

 

 

임의접근 반복자처럼 원하는 위치에 접근& 삽입 방법
list<int>::iterator it;
list<int> li;

it = li.begin() // 맨 앞을 가리키도록
advance(it, 원하는 거리); // 원하는 거리만큼 떨어진 위치를 가리키도록 함.
li.insert(it, value); // 그 위치에 원소 삽입
*it = value; // 그 위치의 값 수정
li.erase(it); // 그 위치의 값 수정. 그 위치부터 연속적으로 값을 삭제할 거라면 it = li.erase(it)이라 해야한다

 

728x90
반응형