변수를 선언하면 꼭 초기화를 해주는 것이 습관인데 배열을 초기화할 때에 항상 for문을 쓰다보니 귀찮기도 하고, 더 빠른 방법이 있을까 싶어 찾아보았다.
0. 가장 간단한 방법
int arr[사이즈]={0,};
가장 간단한 방법이다
주의점: 0으로만 초기화 할 수 있다. 0이 아닌 다른 값을 넣으면 가장 첫번째 값만 해당 값으로 초기화되고 나머지는 모두 0으로 초기화한다
1. memset
void *memset(
void *dest, // 대상 포인터
int c, // 초기화할 문자
size_t count // 문자 수
); // 반환 값: dest 값
dest의 처음 count 문자를 c 문자로 설정한다
C: <memory.h> 또는 <string.h>, C++: <cstring> 헤더가 필요하다.
다른 방법들보다 속도가 빠르다고 하는데 아직 체감은 못 했다.
주의점: 1바이트 단위로 메모리를 초기화한다. 0, -1이 아닌 다른 정수로 초기화하는 경우, int 타입은 4바이트로 표현하기 때문에 의도치 않은 값으로 초기화될 수 있다. true, false, 0, -1, char로만 초기화하자.
2. fill_n
template< class OutputIt, class Size, class T >
constexpr OutputIt fill_n( OutputIt first, Size count, const T& value );
first: 변경하려는 범위의 시작 주소, count: 변경할 원소 개수, value: 변경할 값
<algorithm> 헤더에 정의되어 있다.
memset과 달리 자료형에 제약이 없다.
참고
<memory> 함수
자세한 정보: 함수
learn.microsoft.com
https://en.cppreference.com/w/cpp/algorithm/fill_n
std::fill_n - cppreference.com
(1) template< class OutputIt, class Size, class T > void fill_n( OutputIt first, Size count, const T& value ); (until C++11) template< class OutputIt, class Size, class T > OutputIt fill_n( OutputIt first, Size count, const T& value ); (since C++11) (until
en.cppreference.com