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

C++ STL set 컨테이너의 operator= 연산자 완벽 가이드

C++ STL set의 operator= 연산자란?

C++ STL에서 operator= 함수는 하나의 set을 다른 set에 복사(copy)하거나 이동(move)시키는 데 사용됩니다. 일반적인 '=' 대입 연산자와 동일한 방식으로 동작하며, 총 세 가지 오버로드된 형태가 제공됩니다.

1. 복사(Copy) 형태

set& operator= (const set& s1)

이 함수는 set s1의 모든 요소를 대상 set에 복사합니다. 매개변수로는 동일한 타입의 set이 전달됩니다.

사용 예: set s1 = s2;

2. 이동(Move) 형태

set& operator= (set&& s1)

이 함수는 set s1의 요소들을 호출한 set으로 이동시킵니다. 불필요한 복사 오버헤드 없이 효율적으로 데이터를 전달할 수 있어 성능 면에서 유리합니다.

3. 초기화 리스트(Initializer List) 형태

set& operator= (initializer_list<value_type> ilist)

이 버전은 초기화 리스트 ilist의 값들을 호출한 set에 복사합니다.

사용 예: set<int> s1 = { 1, 2, 3, 4, 5 };

참고: 위 세 가지 형태 모두 set<T> 타입의 this 포인터에 대한 참조를 반환합니다.

예제 코드

다음 프로그램은 C++에서 set의 operator= 연산자를 실제로 사용하는 방법을 보여줍니다.

#include <iostream>
#include <set>
using namespace std;

int main(){
    set<int> set1, set2;
    // 리스트 초기화
    set1 = { 1, 2, 3, 4, 5 };
    set2 = { 10, 11, 12, 13 };
    // 복사 전 상태 출력
    cout << "set1 :";
    for (auto s = set1.begin(); s != set1.end(); ++s) {
        cout << *s << " ";
    }
    cout << endl;
    cout << "set2 :";
    for (auto s = set2.begin(); s != set2.end(); ++s) {
        cout << *s << " ";
    }
    // set2를 set1로 복사한 후 출력
    cout << endl << "After Copy" << endl;
    cout << "set1 :";
    set1 = set2;
    for (auto s = set1.begin(); s != set1.end(); ++s) {
        cout << *s << " ";
    }
    return 0;
}

실행 결과

set1 :1 2 3 4 5
set2 :10 11 12 13
After Copy
set1 :10 11 12 13

결과 분석

먼저 초기화 리스트 형태의 operator=를 사용해 set1과 set2에 각각 값을 할당했습니다. 이후 set1 = set2; 문장으로 복사 형태의 operator=가 호출되면, set1의 기존 내용({1, 2, 3, 4, 5})은 사라지고 set2의 내용({10, 11, 12, 13})으로 완전히 대체됩니다. 즉, set의 대입 연산은 기존 요소를 모두 제거하고 새로운 요소로 교체하는 방식으로 동작한다는 점을 확인할 수 있습니다.