Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL list의 push_front() 함수 완벽 가이드: 문법과 예제

이 글에서는 C++ STL의 push_front() 함수가 어떻게 동작하는지, 그 문법과 실제 활용 예제를 자세히 살펴보겠습니다.

STL에서 list란 무엇인가?

list는 시퀀스 내 어느 위치에서든 상수 시간(O(1))에 삽입과 삭제를 수행할 수 있는 자료구조입니다. 내부적으로 이중 연결 리스트(doubly linked list)로 구현되어 있어 메모리가 연속적이지 않은(non-contiguous) 방식으로 할당됩니다. 따라서 컨테이너의 임의 위치에 요소를 삽입하거나 추출·이동하는 작업에서는 array, vector, deque보다 훨씬 뛰어난 성능을 발휘합니다. 다만 특정 요소에 직접 접근하는 속도는 느린 편입니다. list는 forward_list와 유사하지만, forward_list는 단일 연결 리스트(singly linked list)로 구현되어 있어 앞쪽 방향으로만 순회할 수 있다는 차이가 있습니다.

push_front()란?

push_front()는 C++ STL에 내장된 함수로, <list> 헤더 파일에 선언되어 있습니다. 이 함수는 list 컨테이너의 맨 앞에 요소를 삽입(push)하는 데 사용됩니다.

- 컨테이너가 비어 있다면, 삽입된 요소가 곧 첫 번째 요소가 됩니다.
- 이미 요소가 들어 있는 경우에는 전달된 요소가 맨 앞에 추가되고, 기존의 첫 번째 요소는 두 번째 자리로 밀려납니다.

함수 호출 후 컨테이너의 크기(size)는 1만큼 증가하며, 맨 앞 삽입은 포인터 조작만으로 이루어지므로 항상 O(1)의 시간 복잡도를 가집니다.

문법

void push_front (const value_type& element1);
void push_front (value_type&& element1);
이 함수는 삽입할 요소 1개만을 매개변수로 받습니다.

반환 값

이 함수는 아무 값도 반환하지 않습니다(void).

예제 1

#include <bits/stdc++.h>
using namespace std;
int main(){
    // 리스트 생성
    list<int> myList;
    // 요소 삽입
    myList.push_back(1);
    myList.push_back(2);
    myList.push_back(3);
    myList.push_back(4);
    // push_front() 호출 전 리스트 출력
    cout<<"List : ";
    for (auto i = myList.begin(); i!= myList.end(); i++)
        cout << *i << " ";
    // push_front() 호출
    myList.push_front(0);
    cout<<"\nList after calling push_front() : ";
    for (auto i = myList.begin(); i!= myList.end(); i++)
        cout << *i << " ";
    return 0;
}

출력

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

List : 1 2 3 4
List after calling push_front() : 0 1 2 3 4

push_back()으로 1~4를 차례대로 넣은 뒤 push_front(0)을 호출하자, 새 요소 0이 리스트의 맨 앞에 추가된 것을 확인할 수 있습니다.

예제 2

#include <iostream>
#include <list>
int main (){
    // 값이 30인 정수 두 개로 리스트 초기화
    std::list<int> myList (2,30);
    myList.push_front (20);
    myList.push_front (10);
    std::cout<<"elements in my list are : ";
    for (std::list<int>::iterator i = myList.begin(); i!= myList.end(); ++i)
        std::cout << ' ' << *i;
    std::cout << '\n';
    return 0;
}

출력

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Elements in my list are : 10 20 30 30

이 예제에서는 값 30을 두 개 가진 리스트를 생성한 후, 20과 10을 순서대로 push_front()로 삽입했습니다. 나중에 삽입한 10이 가장 앞에 위치하게 되어 최종적으로 10 20 30 30 순서로 출력됩니다. 이처럼 push_front()는 새로운 요소를 항상 리스트의 맨 앞에 배치한다는 점을 기억하면 됩니다.