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

C++ STL list swap() 함수 완벽 가이드 – 두 리스트의 요소 맞바꾸기

이 글에서는 C++ STL에서 제공하는 list swap() 함수의 기능과 사용 방법을 예제 코드와 함께 자세히 살펴봅니다.

STL에서 리스트(List)란?

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

배열(array), 벡터(vector), 덱(deque)과 비교하면 리스트는 컨테이너 내 임의 위치에서 요소를 삽입·추출·이동하는 작업에서 훨씬 뛰어난 성능을 보여줍니다. 다만 인덱스를 통한 직접 접근은 느리다는 단점이 있습니다.

리스트는 forward_list와 유사하지만, forward_list는 단일 연결 리스트(singly linked list)로 구현되어 앞쪽 방향으로만 순회할 수 있다는 차이점이 있습니다.

swap() 함수란?

swap() 함수는 한 리스트의 요소들을 다른 리스트와 맞바꾸는(swap) 데 사용됩니다. 단, 두 리스트는 반드시 동일한 데이터 타입이어야 합니다. 리스트의 swap은 내부 포인터만 교환하므로 매우 빠르게 수행됩니다.

문법(Syntax)

listname1.swap(listname2);

예제 – 입출력 동작

입력 List1: 50 60 80 90
     List2: 90 80 70 60

스왑 연산 후 출력
List1: 90 80 70 60
List2: 50 60 80 90

입력 List1: 45 46 47 48 49
     List2: 50 51 52 53 54

스왑 연산 후 출력
List1: 50 51 52 53 54
List2: 45 46 47 48 49

구현 절차

  • 먼저 두 개의 리스트를 초기화합니다.

  • 두 리스트의 내용을 출력합니다.

  • swap() 함수를 호출하여 두 리스트를 맞바꿉니다.

  • 마지막으로 스왑 연산 후의 두 리스트를 출력합니다.

위 절차를 따르면 두 리스트의 요소를 손쉽게 맞바꿀 수 있습니다.

예제 1

// C++ 코드: STL에서 list swap() 함수의 동작을 보여줍니다
#include <iostream>
#include <list>
using namespace std;

int main() {
    // 두 개의 리스트 초기화
    list<int> list1 = { 10, 20, 30, 40, 50 };
    cout << "List1: ";
    for (auto x = list1.begin(); x != list1.end(); ++x)
        cout << *x << " ";

    list<int> list2 = { 40, 50, 60, 70, 80 };
    cout << "\nList2: ";
    for (auto x = list2.begin(); x != list2.end(); ++x)
        cout << *x << " ";

    // swap() 함수 호출
    list1.swap(list2);

    cout << "\n스왑 후 List1: ";
    for (auto x = list1.begin(); x != list1.end(); ++x)
        cout << *x << " ";

    cout << "\n스왑 후 List2: ";
    for (auto x = list2.begin(); x != list2.end(); ++x)
        cout << *x << " ";

    return 0;
}

실행 결과

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

입력 - List1: 10 20 30 40 50
       List2: 40 50 60 70 80
출력 - 스왑 후 List1: 40 50 60 70 80
       스왑 후 List2: 10 20 30 40 50

예제 2

// C++ 코드: STL에서 list swap() 함수의 동작을 보여줍니다
#include <iostream>
#include <list>
using namespace std;

int main() {
    // 두 개의 리스트 초기화
    list<int> list1 = { 11, 12, 13, 14, 15 };
    cout << "List1: ";
    for (auto x = list1.begin(); x != list1.end(); ++x)
        cout << *x << " ";

    list<int> list2 = { 16, 17, 18, 19, 20 };
    cout << "\nList2: ";
    for (auto x = list2.begin(); x != list2.end(); ++x)
        cout << *x << " ";

    // swap() 함수 호출
    list1.swap(list2);

    cout << "\n스왑 후 List1: ";
    for (auto x = list1.begin(); x != list1.end(); ++x)
        cout << *x << " ";

    cout << "\n스왑 후 List2: ";
    for (auto x = list2.begin(); x != list2.end(); ++x)
        cout << *x << " ";

    return 0;
}

실행 결과

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

입력 - List1: 11 12 13 14 15
       List2: 16 17 18 19 20
출력 - 스왑 후 List1: 16 17 18 19 20
       스왑 후 List2: 11 12 13 14 15

정리

C++ STL의 list swap() 함수는 두 리스트의 내용을 상수 시간에 서로 교환하는 효율적인 방법입니다. 별도의 복사나 반복문 없이 한 줄의 호출만으로 두 리스트 전체를 맞바꿀 수 있으므로, 리스트 데이터를 교체해야 하는 상황에서 적극적으로 활용해 보시기 바랍니다.