이 글에서는 C++에서 forward_list의 assign() 함수가 어떻게 동작하는지 살펴보겠습니다.
forward_list란?
forward_list는 일반 list와 달리 다음(next) 요소와의 연결만 유지합니다. 일반 list는 이전(previous) 요소와의 연결도 함께 유지하기 때문에 앞방향과 뒷방향 모두로 순회(iteration)할 수 있지만, forward_list는 앞방향으로만 순회가 가능합니다. 대신 메모리 오버헤드가 적고 더 효율적이라는 장점이 있습니다.
assign() 함수란?
forward_list::assign() 함수는 C++ 표준 템플릿 라이브러리(STL)의 일부입니다. 이 함수는 forward_list에 요소를 삽입하는 데 사용되며, 만약 리스트에 이미 요소가 존재한다면 기존 요소들은 새로 추가되는 요소들로 대체됩니다.
이 함수를 호출하려면 <forward_list> 헤더 파일을 포함해야 합니다.
문법(Syntax)
이 함수에는 서로 다른 방식에 대응하는 3가지 문법이 있습니다.
- Forward_list_name.assign(initializer_list);
- Forward_list_name.assign(iterator itr1, iterator itr2);
- Forward_list_name.assign(count, value);
매개변수(Parameters)
initializer_list — 첫 번째 방식에서는 전달된 초기화 리스트(initializer list)의 값들이 전달된 순서 그대로 forward_list에 할당됩니다.
iterator — 두 번째 방식에서는 반복자 itr1과 itr2가 가리키는 범위 사이에 있는 값들이 forward_list에 할당됩니다. 이때 itr1이 가리키는 값은 포함되지만, itr2가 가리키는 값은 포함되지 않습니다.
count와 value — 세 번째 방식에서 'count'는 forward_list에 삽입할 요소의 개수를 의미하고, 'value'는 각 요소에 할당될 값을 의미합니다.
반환값(Return Value)
이 함수는 어떤 값도 반환하지 않습니다(void).
예제
입력: assign(5,1) 출력: 1 1 1 1 1
설명: 위 예제에서는 int 타입의 forward_list "Lt"를 생성한 뒤, assign() 함수에 count와 value 매개변수를 사용하여 값을 할당했습니다. 그 결과 리스트 "Lt"에는 값이 1인 요소 5개가 할당되어 출력 결과가 "1 1 1 1 1"이 됩니다.
예제 프로그램의 접근 방식
- 먼저 int 타입의 forward_list 세 개를 생성합니다. 예를 들어 "Lt1", "Lt2", "Lt3"라고 하겠습니다.
- Lt1에는 initializer_list를 매개변수로 전달하여 assign() 함수로 요소를 할당합니다.
- Lt2에는 count와 value를 매개변수로 전달하여 assign() 함수로 요소를 할당합니다.
- Lt3에는 두 개의 반복자를 매개변수로 전달하여 assign() 함수로 요소를 할당합니다. 여기서는 각각 리스트 Lt1의 시작 위치와 끝 위치를 가리킨다고 가정합니다.
알고리즘(Algorithm)
시작
Step 1 -> main() 함수 내에서
forward_list<int> Lt1, Lt2, Lt3 선언
Lt1.assign(초기화 리스트) 호출
Lt2.assign(count, value) 호출
Lt3.assign(Lt1.begin(), Lt1.end()) 호출
종료전체 예제 코드
#include <forward_list>
#include <iostream>
using namespace std;
int main() {
forward_list<int> Lt1;
forward_list<int> Lt2;
forward_list<int> Lt3;
// Lt1에 요소 할당
Lt1.assign({4,9,7,8});
// Lt2에 요소 할당
Lt2.assign(3,6);
// Lt3에 요소 할당
Lt3.assign(Lt1.begin(),Lt1.end());
// 리스트 출력
cout << "Lt1: ";
for (int& D : Lt1)
cout << D << " ";
cout << endl;
// Lt2 출력
cout << "Lt2: ";
for (int& D : Lt2)
cout << D << " ";
// Lt3 출력
cout << "Lt3: ";
for (int& D : Lt3)
cout << D << " ";
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
Lt1: 4 9 7 8 Lt2: 6 6 6 Lt3: 4 9 7 8
정리
C++ STL의 forward_list::assign() 함수는 세 가지 방식(초기화 리스트, 반복자 범위, 개수와 값)으로 리스트의 내용을 한 번에 설정할 수 있는 편리한 도구입니다. 기존 요소를 모두 교체하므로 리스트를 새로 초기화해야 하는 상황에서 특히 유용하게 활용할 수 있습니다.