동적 배열에 사용되는 자료구조이다.
Doubly Linked LIst 형태로 구현되어 있어 앞뒤로 요소 삽입이 가능하다는 특징이 있다.
자 지금까지 array나 vector 같은 배열들의 경우는 연속된 메모리 공간에 할당되어 Random Access가 가능했다.
(A[3] 이런 접근)
하지만 List가 linked list 형태로 제작되었다는 건?
⇒ 메모리 상에서 연속된 공간이 아니라는 것
⇒ 인접 Node에 저장된 pointer로만 접근이 가능하다는 것
때문에 list는 Random Access가 불가능하다.
오직 Iterator를 이용한 접근 만이 가능하다.
그래서 이런 구조가 유용하지 않은가?
그건 아니다.
이런 Linked List 형태는 중간에 요소를 삽입하거나 삭제하는 과정이 매우 간단하다.
Vector나 Array가 요소 삽입을 위해 나머지 요소들의 위치를 바꿔야 한다면,
list는 그저 pointer가 가리키는 주소만 바꿔주면 된다.
이는 삽입과 삭제가 많은 작업에서 큰 이점으로 작용할 수 있다.
#include <iostream>
#include <list>
int main() {
// std::list 선언 및 초기화
std::list<int> myList = {1, 2, 3, 4, 5};
// 리스트 크기
std::cout << "리스트 크기: " << myList.size() << std::endl;
// 리스트의 끝에 요소 추가
myList.push_back(6);
// 리스트의 시작에 요소 추가
myList.push_front(0);
// 리스트 순회
for (const auto& element : myList) {
std::cout << element << " ";
}
std::cout << std::endl;
return 0;
}
std::list<int> myList = {1, 2, 3, 4, 5};
auto it = std::next(myList.begin(), 2); // 세 번째 요소 위
myList.insert(it, 99); // 중간에 99를 삽입
myList.erase(std::next(myList.begin(), 3)); // 네 번째 요소 삭제
for (auto& a : myList) {
std::cout << a << ' ';
}
next를 통해 원하는 위치를 지정할 수 있다.
위 코드 출력은 아래와 같다.
STL :: vector (0) | 2024.02.02 |
---|---|
STL :: array<type, num> (0) | 2024.02.02 |
STL :: algorithm - next_permutation() (순열, 조합) (0) | 2024.01.25 |
STL :: pair ( 두 데이터 타입을 쌍으로 묶기 ) (0) | 2024.01.24 |
STL :: map ( 마치 vector에 pair를 저장한 것 같은 ) (0) | 2024.01.24 |
댓글 영역