본문 바로가기
C++

[c++] fill 함수 - 배열 전체를 특정 값으로 초기화하기

by 몽슬몽슬 2020. 8. 27.

배열 전체를 특정 값으로 초기화하는 방법으로 크게 세 가지를 들 수 있다.

  1. cstring 헤더에 있는 memset 함수 사용하기

  2. for 루프 돌리기

  3. 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로 초기화된다. 

댓글