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
반응형
'Programming Language > C++' 카테고리의 다른 글
[C++] Union-Find 구현 (0) | 2024.09.08 |
---|---|
[C++] Tree의 정의 및 Binary Search Tree의 구현 (0) | 2024.09.08 |
[C++] Associative containers (set, map, multiset, multimap) (0) | 2024.07.24 |
[C++] Sequence Container (array, vector, duque, forward_list, list) (6) | 2024.07.24 |