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

C++ STL forward_list::operator= 완벽 정리: 개념, 문법, 예제

이 글에서는 C++ STL의 forward_list::operator=가 어떻게 동작하는지, 그리고 그 문법과 실제 사용 예제를 자세히 알아보겠습니다.

STL에서 forward_list란 무엇인가?

forward_list는 시퀀스 내 임의의 위치에서 상수 시간(constant time)에 요소를 삽입하고 삭제할 수 있는 시퀀스 컨테이너입니다. forward_list는 단일 연결 리스트(singly-linked list)로 구현되며, 각 요소는 시퀀스상 다음 요소를 가리키는 링크를 통해 순서가 유지됩니다.

forward_list::operator=란 무엇인가?

forward_list::operator=는 기존에 저장된 값을 대체하면서 forward_list 컨테이너에 새로운 값을 할당하는 데 사용되는 대입 연산자입니다. 이 연산자는 새로 할당되는 값에 맞춰 forward_list 컨테이너의 크기도 함께 조정합니다.

문법

Forward_container1 = (forward_container2);

이 연산자는 동일한 타입의 다른 forward_list 컨테이너를 인자로 받습니다.

반환값

"*this" 포인터를 반환합니다.

예제 1

아래 코드에서는 두 개의 forward_list를 생성하고 각각 요소를 삽입한 뒤, '=' 연산자를 사용하여 forwardList1의 기존 요소들을 forwardList2의 요소들로 덮어쓰는 과정을 보여줍니다.

#include <forward_list>
#include <iostream>
using namespace std;
int main(){
    forward_list<int> forwardList1 = {10, 20, 30 };
    forward_list<int> forwardList2 = { 0, 1, 2, 3 };
    forwardList1 = forwardList2;
    cout << "forwardList2를 = 연산자로 할당한 후의 forwardList1\n";
    for (auto i = forwardList1.begin(); i != forwardList1.end(); ++i)
        cout << ' ' << *i;
    return 0;
}

출력

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

forwardList2를 = 연산자로 할당한 후의 forwardList1
0 1 2 3

실행 결과를 보면 forwardList1의 기존 값 {10, 20, 30}이 사라지고, forwardList2의 값 {0, 1, 2, 3}으로 완전히 교체된 것을 확인할 수 있습니다.

예제 2

이번에는 두 개의 forward_list를 생성하고 '=' 연산자로 값을 복사한 후, 원본인 forwardList2도 함께 변경되는지 확인해 보겠습니다. 즉, 대입 연산이 원본 컨테이너에 영향을 미치는지 살펴보는 것이 핵심입니다.

#include <forward_list>
#include <iostream>
using namespace std;
int main(){
    forward_list<int> forwardList1 = {10, 20, 30 };
    forward_list<int> forwardList2 = { 0, 1, 2, 3 };
    forwardList1 = forwardList2;
    cout << "forwardList2를 = 연산자로 할당한 후의 forwardList1\n";
    for (auto i = forwardList1.begin(); i != forwardList1.end(); ++i)
        cout << ' ' << *i;
    cout << "\nforwardList1에 할당한 후의 forwardList2\n";
    for (auto i = forwardList2.begin(); i != forwardList2.end(); ++i)
        cout << ' ' << *i;
    return 0;
}

출력

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

forwardList2를 = 연산자로 할당한 후의 forwardList1
0 1 2 3
forwardList1에 할당한 후의 forwardList2
0 1 2 3

정리

forward_list::operator=는 깊은 복사(deep copy) 방식으로 동작합니다. 따라서 대입 이후 두 컨테이너는 서로 독립적이며, 한쪽을 수정해도 다른 쪽에는 영향을 주지 않습니다. 위 예제에서 forwardList2의 값이 그대로 유지되는 것을 통해 이를 확인할 수 있습니다. 또한 이 연산자의 시간 복잡도는 선형(linear)이며, 대입되는 요소의 개수에 비례합니다.