배열 초기화 방법 공부
코딩 테스트를 할 때 배열을 선언하고 초기화 하는 경우가 많습니다. 전역 변수로 선언하면 직접 초기화할 필요가 없지만, 한 번 실행 후 테스트 케이스가 여러 개인 경우, 배열을 매 케이스마다 초기화할 필요가 있습니다. c/c++에서는 이를 방지하기 위해 memset과 fill 두 가지의 배열 초기화 함수를 제공합니다.
memset() 함수
- “cstring” 또는 “string.h” 헤더 사용합니다.
- 배열 원소를 초기화하는 것이 아니라 메모리 값을 초기화하기 때문에 0과 -1만 사용가능합니다. 그 외의 수는 원하는 값으로 초기화 되지 않습니다.
void memset(void *ptr, int value, size_t num)
- void *ptr: 배열이나 어떤 container의 자료형의 시작 포인터
- int value: 배열이나 어떤 container에 채울 자료 (이 값은 unsigned char로 변환되어 삽입)
-
size_t num: 배열이나 어떤 container에 int value 값을 얼마나 넣을지 결정
- 예시
int nums[5]; memset(nums, 0, sizeof(nums)); for (int num : nums) cout << num << " ";
- 출력 결과
0 0 0 0 0
fill() 함수
- “algorithm” 헤더를 사용합니다.
- memset과 다르게 value 자료형에서의 오버플로우가 아니라면 원하는 값을 채울 수 있습니다.
void fill(ForwardIt first, ForwardIt last, const T& value)
- ForwardIt first: 배열이나 어떤 container 시작 Iterator, 배열의 경우 첫 포인터
- ForwardIt last: 배열이나 어떤 container 끝 Iterator, 배열의 경우 마지막 포인터
-
const T& value: 배열이나 어떤 container 자료형에 넣을 값
- 예시
int nums[5]; fill(nums, nums + 5, 0); for (int num : nums) cout << num << " ";
- 출력 결과
0 0 0 0 0