C++에서 STL list 컨테이너에 여러 개의 요소가 들어 있다고 가정해 봅시다. 여기에 새로운 요소를 추가하려면 리스트의 맨 앞, 맨 뒤, 혹은 원하는 임의의 위치에 삽입할 수 있습니다.
STL list의 대표적인 삽입 방법
1. 맨 앞에 삽입 — push_front()
push_front() 함수를 사용하면 리스트의 시작 부분에 새 요소를 추가할 수 있습니다.
2. 맨 뒤에 삽입 — push_back()
push_back() 함수를 사용하면 리스트의 마지막 부분에 새 요소를 추가할 수 있습니다.
3. 임의의 위치에 삽입 — insert()와 반복자 활용
특정 위치에 요소를 넣으려면 먼저 반복자(iterator)를 선언한 뒤 advance() 등으로 원하는 위치까지 이동시키고, insert() 메서드를 호출하여 해당 자리에 값을 삽입해야 합니다.
예제 코드
#include<iostream>
#include<list>
using namespace std;
void display(list<int> my_list){
for (auto it = my_list.begin(); it != my_list.end(); ++it)
cout << *it << " ";
}
int main() {
int arr[] = {10, 41, 54, 20, 23, 69, 84, 75};
int n = sizeof(arr)/sizeof(arr[0]);
list<int> my_list;
for(int i = 0; i<n; i++){
my_list.push_back(arr[i]);
}
cout << "삽입 전 리스트: ";
display(my_list);
//맨 앞에 100 삽입
my_list.push_front(100);
//맨 뒤에 500 삽입
my_list.push_back(500);
//인덱스 5 위치에 1000 삽입
list<int>::iterator it = my_list.begin();
advance(it, 5);
my_list.insert(it, 1000);
cout << "\n삽입 후 리스트: ";
display(my_list);
}실행 결과
삽입 전 리스트: 10 41 54 20 23 69 84 75 삽입 후 리스트: 100 10 41 54 20 1000 23 69 84 75 500
정리
위 예제에서 볼 수 있듯이, push_front(100)으로 맨 앞에 100이 추가되고, push_back(500)으로 맨 뒤에 500이 추가되었습니다. 또한 반복자를 인덱스 5까지 이동시킨 후 insert(it, 1000)을 호출하여 기존 값 23 앞에 1000이 성공적으로 삽입된 것을 확인할 수 있습니다. STL list는 이중 연결 리스트로 구현되어 있어 맨 앞과 맨 뒤에서의 삽입·삭제가 O(1)의 시간 복잡도로 매우 빠르다는 장점이 있습니다.