[C++] 배열 특정값으로 초기화

유지연·2023년 11월 20일
0

C++

목록 보기
5/7

👋 배열을 특정값으로 초기화하는 방법을 알아보자! (TIL 231120)


배열을 초기화하는 방법 중 가장 간단한 것은 아래와 같다!

int arr1[3] = {0, };
int arr2[4][4]= {0, };

위 코드를 실행시켜보면 배열의 모든 값이 0으로 초기화 된 것을 확인할 수 있다.
하지만 이 방법은 치명적인 단점이 있다.

int arr3[5] = {100, };
int arr4[6][6] = {-100, };

0이 아닌 값으로 초기화를 시도하는 경우, 가장 첫 번째 원소만 그 값으로 초기화되고 (2차원의 경우 arr[0][0] 원소) 나머지 원소의 값은 모두 0이 된다.

그렇다면 0이 아닌 값으로 배열을 초기화하는 방법은 무엇이 있을까?

💡 std::fill_n( )

template< class OutputIt, class Size, class T >
OutputIt fill_n( OutputIt first, Size count, const T& value );

fill_n (배열의 시작 주소, 변경하려는 원소의 개수, 변경 값)

fill_n( ) 함수를 사용하면, 배열의 원하는 구간을 동일한 값으로 초기화 시킬 수 있다.

int arr1[9];
int arr2[3][4];

fill_n(arr1, 9, 5);
fill_n(arr1, sizeof(arr1)/sizeof(arr1[0]), 5);

fill_n(&arr1[0], 9, 5);
fill_n(&arr1[0], sizeof(arr1)/sizeof(arr1[0]), 5);

fill_n(arr2[0], 12, 7); //2차원 배열의 경우 시작주소를 배열의 이름만으로 하면 오류가 남

💡 std::fill( )

template< class ForwardIt, class T >
void fill( ForwardIt first, ForwardIt last, const T& value ;

fill (배열의 시작 주소, 배열의 끝 주소, 변경 값)

fill_n( ) 함수와 비슷해 보이지만 인자로 변경하고자 하는 원소의 개수가 아닌 범위의 끝 주소를 준다는 점에 있어 차이가 있다. 이 때 주의할 점은 배열의 끝 주소의 바로 앞 원소까지만 변경이 적용된다는 것이다.

예를 들어 arr[1]~arr[3] 범위의 원소 값을 7로 설정 해주고 싶다면

int arr[7];
fill(arr+1, arr+4, 7);

다음과 같이 코드를 작성해야한다.

fill( )과 fill_n( ) 함수 모두 algorithm 헤더파일에 위치하며 std namespace를 가진다.

profile
Keep At It

0개의 댓글