HyeLog
C++ 1차원, 2차원 배열 초기화 방법 (fill) 본문
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을 쓰는 것을 권장한다!
'알고리즘' 카테고리의 다른 글
[Visual Studio, C++] 파일 읽기, 쓰기 방법(input.txt, output.txt) (0) | 2023.02.02 |
---|---|
우선순위 큐, Pair, 최소힙, 최대힙 (0) | 2023.02.01 |
6064_카잉 달력 (0) | 2023.01.05 |
9095_1, 2, 3 더하기 (0) | 2023.01.05 |
1748_수 이어 쓰기 1 (0) | 2023.01.05 |