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

C++ STL list::reverse() 함수로 리스트 순서 뒤집기

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

STL에서 리스트(List)란?

리스트는 시퀀스 내 어느 위치에서든 상수 시간(O(1))에 삽입과 삭제를 수행할 수 있는 자료구조입니다. 리스트는 내부적으로 이중 연결 리스트(doubly linked list)로 구현되어 있으며, 비연속적인 메모리 할당을 허용합니다.

배열(array), 벡터(vector), 덱(deque)과 비교했을 때, 리스트는 컨테이너의 임의 위치에서 요소를 삽입하거나 추출하고 이동하는 작업에서 훨씬 뛰어난 성능을 보입니다. 반면 특정 요소에 직접 접근하는 속도는 느린 편입니다.

리스트는 forward_list와 비슷하지만, forward_list 객체는 단일 연결 리스트(singly linked list)이기 때문에 앞쪽(forward) 방향으로만 순회할 수 있다는 차이점이 있습니다.

list::reverse()란 무엇인가?

list::reverse()는 C++ STL에 내장된 함수로, <list> 헤더 파일에 선언되어 있습니다. 이 함수는 리스트 컨테이너의 요소 순서를 거꾸로 뒤집는 역할을 합니다. 즉, 리스트의 마지막 요소가 첫 번째 요소가 되고, 첫 번째 요소는 마지막 요소가 됩니다.

아래는 리스트와 이를 뒤집은 형태를 도식화한 그림입니다.

C++ STL list::reverse() 함수로 리스트 순서 뒤집기

문법(Syntax)

List_name.reverse();

이 함수는 매개변수를 받지 않습니다.

반환 값(Return Value)

이 함수는 별도의 값을 반환하지 않습니다. 단순히 호출된 리스트 컨테이너 자체의 순서를 뒤집는 동작만 수행합니다.

예제 코드

#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);
    // reverse() 적용 전 리스트 출력
    cout<<"List : ";
    for (auto i = myList.begin(); i != myList.end(); i++)
        cout << *i << " ";
    // 리스트 뒤집기
    myList.reverse();
    cout<<"\nList after applying reverse() : ";
    for (auto i = myList.begin(); i != myList.end(); i++)
        cout << *i << " ";
    return 0;
}

실행 결과(Output)

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

List : 1 2 3 4
List after applying reverse(): 4 3 2 1

실행 결과를 보면 reverse() 함수 호출 전에는 1, 2, 3, 4 순서였던 리스트가 함수 호출 후에는 4, 3, 2, 1로 완전히 뒤집힌 것을 확인할 수 있습니다.