HyeLog

C++ 1차원, 2차원 배열 초기화 방법 (fill) 본문

알고리즘

C++ 1차원, 2차원 배열 초기화 방법 (fill)

shj718 2023. 1. 31. 16:09

PS를 하다보면, 0이나 -1이 아닌 다른 값으로 배열을 초기화해야 하는 경우가 많다.

그런데, cstring 헤더의 memset은 0, -1으로 초기화할 때만 사용할 수 있기 때문에

다른 값으로 초기화하고자 할 경우, algorithm 헤더의 fill 함수를 사용해야 한다.

void fill (ForwardIterator first, ForwardIterator last, const T& val);

1번째 인자로는 초기화하고자 하는 배열의 시작 위치 iterator를,

2번째 인자로는 배열의 마지막 위치 iterator를(⭐이때 last는 초기화에 포함되지 않는다⭐),

3번째 인자로는 초기화하고자 하는 값을 넣어주면 된다.

1차원 배열

vector<int> v(10); // 백터 생성

fill (v.begin(), v.end(), 5); // 1번째 위치부터 끝까지 5로 초기화

2차원 배열

2차원 배열 전체를 초기화 하려면,

첫번째 인자로는 &arr[0][0], 두번째 인자로는 &arr[0][0] + 배열 크기, 세번째 인자로는 초기화할 값을 넣어주면 된다.

 

예를 들어, N * M 크기의 배열1로 초기화하려면, fill(&arr[0][0], &arr[0][0] + N * M, 1); 을 하면 된다.

#define MAX 10 // 최대값 정의

int arr[MAX][MAX]; // 2차원 배열 생성

fill(&arr[0][0], &arr[0][0] + MAX * MAX, 5); // 2차원 배열 전체를 5로 초기화

 

하지만, 배열을 0이나 -1로 초기화하려는 경우, memset이 fill 보다 속도가 빠르기 때문에 memset을 쓰는 것을 권장한다!