: STL에 지정된 list는 Double Linked List(양방향 연결 리스트)로 구현되어 있다.
list<type> list1; // type 자료형을 담는 리스트 선언
list<type> list1(num); // num개의 원소를 갖는 리스트 선언 (각 원소는 0으로 초기화 됨)
list<type> list1(num, value) // num개의 원소를 갖는 리스트 선언, 각 원소는 value로 초기화
list<type> list1{1, 2, 3, 4} // 특정 공간의 개수, 특정 값 지정해 리스트 초기화
list1.push_front(value) // 리스트 맨 앞에 value값 갖는 원소 추가
list1.push_back(value) // 리스트 맨 뒤에 value값 갖는 원소 추가
insert(iterator, value) // iterator가 가리키는 부분 앞에 value값 갖는 원소 추가
list1.pop_front() // 리스트 맨 앞의 원소 삭제
list1.pop_back() // 리스트 맨 뒤의 원소 삭제
erase(iterator) // iterator가 가리키는 부분 원소 삭제
*iterator // iterator가 가리키는 원소에 접근
list1.front() // 리스트 맨 앞의 원소 반환
list1.back() // 리스트 맨 뒤의 원소 반환
list1.empty() // 리스트가 비어있는지 여부 반환 (비어있으면 1, 아니면 0 반환)
list1.size() // 리스트의 사이즈 반환(원소 개수)
list의 경우 iterator에 +
나 -
등 의 산술 연산이 불가능하다.
: 산술 연산이 가능한 iterator는 Random Access Iterator(임의 접근 반복자)인데, 이에 해당하는 컨테이너는 vector와 deque밖에 없기 때문이다. 때문에 list의 iterator를 이동시키기 위해서는 다른 방법을 사용해야 한다.
: advance() 함수는 주어진 값만큼 iterator를 이동시키는 역할을 하는 함수이다.
해당 함수를 사용하면 임의 접근이 불가능한 list에서 임의 접근과 같은 효과를 낼 수 있다.
list<int> list1{1, 2, 3};
auto it = list1.begin(); // list1의 맨 앞 부분을 가리킴.
advance(it, 1); // list1의 맨 앞에서 한 칸 오른쪽으로 이동
cout << *it << endl;
출력 : 2
👁️🗨️ 참고
https://loadofprogrammer.tistory.com/76
https://chanheess.tistory.com/154
https://jhnyang.tistory.com/377
https://losskatsu.github.io/programming/c-stl-list/#
https://ansohxxn.github.io/stl/chapter16-2/