배열 전체를 특정 값으로 초기화하는 방법으로 크게 세 가지를 들 수 있다.
-
cstring 헤더에 있는 memset 함수 사용하기
-
for 루프 돌리기
-
algorithm 헤더에 있는 fill 함수 사용하기
이 중 가장 추천하는 방법은 3번, fill 함수를 사용하는 것이다.
memset 함수는 코드 작성 시 실수를 범할 여지가 굉장히 많기 때문에 사용하지 않는 것이 좋다. for 루프를 돌며 원소 하나하나에 값을 직접 대입하는 방법이 가장 무난해 보이지만, fill 함수를 사용하면 훨씬 간단하고 안전하게 코드를 작성할 수 있다.
fill 함수
범위 내의 원소를 val 값으로 채운다. 이때 범위는 [first, last) 이다. 즉, first 는 범위 내에 포함되고 last 는 포함되지 않는다.
template <class ForwardIterator, class T>
void fill(ForwardIterator first, ForwardIterator last, const T& val);
fill 함수를 사용하여 int 배열 전체를 5로 초기화하는 코드를 작성하면 다음과 같다.
#include <algorithm> // std::fill
void printArr(int arr[], int &len) {
// Print the elements of the array
}
int main(void) {
int len = 5;
int arr[5] = {1, 2, 3, 4, 5};
std::fill(arr, arr + len, 5);
printArr(arr, len);
}
배열을 출력해보면 모든 원소가 5로 초기화되었음을 확인할 수 있다.
2차원 배열을 초기화하고 싶을땐 어떻게 할까?
n * m 크기의 2차원 배열을 5로 초기화하고 싶을땐 다음과 같이 작성하면 된다.
#include <algorithm>
int main(void) {
int N = 3;
int M = 5;
int arr[N][M];
std::fill(&arr[0][0], &arr[N][M], 5);
}
(0, 0) 에서 (N-1, M-1) 까지의 값이 모두 5로 초기화된다.
댓글