이 글에서는 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)이며, 대입되는 요소의 개수에 비례합니다.