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

C++ STL forward_list::swap() 함수 완벽 가이드

이 글에서는 C++에서 forward_list::swap() 함수의 동작 원리와 사용법을 자세히 살펴보겠습니다.

포워드 리스트(Forward List)란?

포워드 리스트는 시퀀스 내 어느 위치에서든 상수 시간(O(1))에 삽입과 삭제 연산을 수행할 수 있는 시퀀스 컨테이너입니다. 포워드 리스트는 단일 연결 리스트(singly-linked list)로 구현되며, 각 요소가 시퀀스상 다음 요소를 가리키는 링크로 연결되어 있어 순서가 유지됩니다.

forward_list::swap()이란?

forward_list::swap()은 C++ 표준 라이브러리에 포함된 함수로, 동일한 데이터 타입을 가진 두 리스트의 내용물을 서로 맞바꾸는(교환하는) 데 사용됩니다. 이 함수를 활용하면 별도의 임시 변수나 반복문 없이 두 리스트 전체를 효율적으로 교환할 수 있습니다.

구문(Syntax)

forward_list1.swap(forward_list2)

또는 비멤버 함수 형태로 다음과 같이 호출할 수 있습니다.

swap(forward_list first, forward_list second)

실행 결과 예시

출력 – 첫 번째 리스트 : 57 99 54 34 84
두 번째 리스트 : 45 65 78 96 77
스왑 연산 후 결과
첫 번째 리스트 : 45 65 78 96 77
두 번째 리스트 : 57 99 54 34 84

구현 접근 방법

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

  • 초기화된 두 포워드 리스트의 내용을 출력합니다.

  • swap() 함수를 호출하여 두 리스트를 교환합니다.

  • 스왑 연산 이후의 포워드 리스트를 출력합니다.

위 접근 방법을 따르면 두 포워드 리스트의 내용을 손쉽게 교환할 수 있습니다.

알고리즘

알고리즘 흐름은 다음과 같습니다.

STEP 1 – 두 개의 포워드 리스트를 초기화하고 출력한다.
    첫 번째 리스트 : forward_list<int> list1 = { 10, 20, 30, 40, 50 }
    for(auto x = list1.begin(); x != list1.end(); ++x)
        cout << *x << " ";
    두 번째 리스트 : forward_list<int> list2 = { 40, 30, 20, 10, 50 }
    for(auto x = list2.begin(); x != list2.end(); ++x)
        cout << *x << " ";
END

STEP 2 – 스왑 연산을 수행하는 swap 함수를 호출한다.
    swap(list1, list2);
END

Stop

전체 코드 예제

// forward_list::swap() 동작을 보여주는 C++ 코드
#include <iostream>
#include <forward_list>
using namespace std;

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

    forward_list<int> list2 = { 40, 30, 20, 10, 50 };
    cout << "List2의 요소 : ";
    for (auto x = list2.begin(); x != list2.end(); ++x)
        cout << *x << " ";
    cout << endl;

    // 스왑 연산을 수행하는 함수 호출
    swap(list1, list2);

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

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

    return 0;
}

출력 결과

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

출력 – List1의 요소 : 10 20 30 40 50
List2의 요소 : 40 30 20 10 50
스왑 후 List1 : 40 30 20 10 50
스왑 후 List2 : 10 20 30 40 50

다른 값으로 실행한 경우의 결과도 확인해 보겠습니다.

출력 – List1의 요소 : 23 56 78 49 11
List2의 요소 : 11 49 78 56 23
스왑 후 List1 : 11 49 78 56 23
스왑 후 List2 : 23 56 78 49 11

정리

forward_list::swap() 함수는 두 리스트의 내용을 상수 시간에 교환할 수 있는 매우 효율적인 기능입니다. 내부적으로는 노드 데이터를 하나씩 복사하는 것이 아니라 내부 포인터만 교환하기 때문에 리스트 크기와 무관하게 빠른 성능을 보장합니다. 두 컨테이너의 타입이 동일해야 하며, 멤버 함수 형태와 비멤버 함수 형태 모두 사용 가능하다는 점을 기억하면 됩니다.