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

C++ STL 리스트(list) 대입 연산자 '=' 사용법과 예제 총정리

이 글에서는 C++ STL에서 리스트(list) 대입 연산자('=')의 기능과 동작 방식을 예제와 함께 자세히 알아봅니다.

STL에서 리스트(List)란 무엇인가?

리스트는 시퀀스 내 어느 위치에서든 일정한 시간(constant time)에 요소를 삽입하고 삭제할 수 있는 컨테이너입니다. 리스트는 이중 연결 리스트(doubly linked list)로 구현되며, 비연속적인(non-contiguous) 메모리 할당을 허용합니다.

리스트는 배열(array), 벡터(vector), 덱(deque)에 비해 컨테이너 내 임의의 위치에서 요소를 삽입·추출·이동하는 작업에서 더 우수한 성능을 보입니다. 반면, 특정 요소에 직접 접근하는 속도는 느린 편입니다. 리스트는 forward_list와 유사하지만, forward_list는 단일 연결 리스트(singly linked list)이므로 앞쪽 방향으로만 순회할 수 있다는 차이점이 있습니다.

'=' 연산자의 용도

'=' 연산자는 리스트의 기존 요소들을 새로운 요소들로 교체(대체)하는 데 사용됩니다. 대입이 완료되면 새로운 내용에 맞게 리스트의 크기도 자동으로 조정됩니다. 이때 새로운 값을 제공하는 컨테이너는 원본 컨테이너와 동일한 데이터 타입이어야 합니다.

문법

listname1 = listname2;

예시

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

입력 - List1: E N E R G Y
       List2: C A P T I O N
출력 - List1: C A P T I O N

구현 접근 방식

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

  • '=' 연산자를 사용하여 한 리스트를 다른 리스트에 대입합니다.

  • 새로운 리스트의 내용을 출력합니다.

위 접근 방식을 활용하면 리스트에 새로운 요소들을 손쉽게 할당할 수 있습니다. 이 연산자의 동작은 swap() 함수와 비슷해 보이지만, 실제로는 list2의 내용을 list1에 복사하여 대입할 뿐 list2의 내용은 변경되지 않습니다. 즉, swap()은 양방향 교환이고 '='는 단방향 대입이라는 점이 핵심 차이입니다.

예제 1: 정수(int) 리스트

// C++ 코드로 STL에서 list '=' 연산자의 동작을 확인하기
#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 << " ";

    // '=' 연산자로 list2의 내용을 list1에 대입
    list1 = list2;

    // 리스트의 새로운 내용 출력
    cout << "\nList1의 새로운 내용: ";
    for (auto x = list1.begin(); x != list1.end(); ++x)
        cout << *x << " ";

    return 0;
}

실행 결과

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

입력 - List1: 10 20 30 40 50
       List2: 40 50 60 70 80
출력 - List1의 새로운 내용: 40 50 60 70 80

예제 2: 문자(char) 리스트

// C++ 코드로 STL에서 list '=' 연산자의 동작을 확인하기
#include <iostream>
#include <list>
using namespace std;

int main() {
    // 두 개의 리스트 초기화
    list<char> list1 = { 'C', 'H', 'A', 'R', 'G', 'E', 'R' };
    cout << "List1: ";
    for (auto x = list1.begin(); x != list1.end(); ++x)
        cout << *x << " ";

    list<char> list2 = { 'P', 'O', 'I', 'N', 'T' };
    cout << "\nList2: ";
    for (auto x = list2.begin(); x != list2.end(); ++x)
        cout << *x << " ";

    // '=' 연산자로 list2의 내용을 list1에 대입
    list1 = list2;

    // 리스트의 새로운 내용 출력
    cout << "\nList1의 새로운 내용: ";
    for (auto x = list1.begin(); x != list1.end(); ++x)
        cout << *x << " ";

    return 0;
}

실행 결과

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

입력 - List1: C H A R G E R
       List2: P O I N T
출력 - List1의 새로운 내용: P O I N T

정리

C++ STL의 리스트 대입 연산자('=')는 한 리스트의 전체 내용을 다른 리스트로 복사하며, 기존 내용은 모두 사라지고 크기도 새로운 내용에 맞게 조정됩니다. 두 리스트는 반드시 같은 타입이어야 하며, 대입 후에도 원본(list2)은 그대로 유지된다는 점을 기억하면 됩니다.