이 글에서는 C++ STL에서 제공하는 list::push_front()와 list::push_back() 함수의 동작 방식, 문법, 그리고 실제 예제를 통해 자세히 알아보겠습니다.
STL에서 리스트(List)란?
리스트는 시퀀스 내 어느 위치에서든 상수 시간(O(1))에 삽입과 삭제를 수행할 수 있는 자료구조입니다. 리스트는 내부적으로 이중 연결 리스트(doubly linked list)로 구현되어 있으며, 비연속적인 메모리 할당을 허용합니다.
리스트는 배열(array), 벡터(vector), 덱(deque)에 비해 컨테이너의 임의 위치에서 요소를 삽입, 추출, 이동하는 작업에서 훨씬 더 나은 성능을 보입니다. 다만 특정 요소에 직접 접근(random access)하는 속도는 느린 편입니다. 리스트는 forward_list와 유사하지만, forward_list는 단일 연결 리스트(singly linked list)이므로 앞쪽 방향으로만 순회할 수 있다는 차이가 있습니다.
list::push_front()란?
list::push_front()는 C++ STL에 내장된 함수로, <list> 헤더 파일에 선언되어 있습니다. 이 함수는 리스트 컨테이너의 맨 앞(시작 부분)에 요소를 삽입하는 데 사용됩니다.
새로운 요소를 맨 앞에 추가하면 기존의 첫 번째 요소는 두 번째 요소가 되고, 삽입된 요소가 새로운 첫 번째 요소가 됩니다. 이때 리스트의 크기(size)도 1만큼 증가합니다.
문법
list_container1.push_front(type_t& value);
매개변수
이 함수는 매개변수를 하나 받으며, 리스트의 시작 부분에 삽입하려는 값을 전달합니다.
반환 값
이 함수는 아무것도 반환하지 않습니다(void).
예제
Input: list<int> List_container = {10, 11, 13, 15};
List_container.push_front(9);
Output:
List = 9 10 11 13 15실제 코드 예제
#include <iostream>
#include <list>
using namespace std;
int main(){
list<int> myList{};
myList.push_front(10);
myList.push_front(20);
myList.push_front(30);
myList.push_front(40);
myList.push_front(50);
myList.sort();
cout<<"Elements in the list are : ";
for (auto i = myList.begin(); i!= myList.end(); ++i)
cout << ' ' << *i;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Elements in the list are : 10 20 30 40 50
list::push_back()란?
list::push_back() 역시 C++ STL에 내장된 함수로, <list> 헤더 파일에 선언되어 있습니다. 이 함수는 리스트 컨테이너의 맨 뒤(끝 부분)에 요소를 삽입하는 데 사용됩니다.
새로운 요소를 맨 뒤에 추가하면 기존의 마지막 요소는 뒤에서 두 번째 요소가 되고, 삽입된 요소가 새로운 마지막 요소가 됩니다. 이때 리스트의 크기(size)도 1만큼 증가합니다.
문법
list_container1.push_back(type_t& value);
매개변수
이 함수는 매개변수를 하나 받으며, 리스트의 끝 부분에 삽입하려는 값을 전달합니다.
반환 값
이 함수는 아무것도 반환하지 않습니다(void).
예제
Input: list<int> List_container = {10, 11, 13, 15};
List_container.push_back(9);
Output:
List = 10 11 13 15 9실제 코드 예제
#include <iostream>
#include <list>
using namespace std;
int main(){
list<int> myList{};
myList.push_back(10);
myList.push_back(20);
myList.push_back(30);
myList.push_back(40);
myList.push_back(50);
myList.sort();
cout<<"Elements in the list are : ";
for (auto i = myList.begin(); i!= myList.end(); ++i)
cout << ' ' << *i;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Elements in the list are : 10 20 30 40 50
마무리
정리하자면, push_front()는 리스트의 맨 앞에, push_back()은 리스트의 맨 뒤에 요소를 추가하는 함수입니다. 두 함수 모두 O(1)의 시간 복잡도로 동작하기 때문에, 양방향에서 빈번하게 데이터를 추가해야 하는 상황에서 리스트(list) 컨테이너는 매우 효율적인 선택이 될 수 있습니다.