본문 바로가기

PL/C & C++

[C++] 2차원 배열 초기화

 

2차원배열의 모든 원소의 값을 1로 하고 싶은 경우

 

 

1)각 원소 직접 지정

int arr[5][5]={{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1}};

이렇게 int arr[5][5]={{1}}; 하나만 지정하면 나머지는 모두 0이 들어갑니다.

다시 해보니 안되네요...

int area[M][N]={{1,0,0,0,0},}; 로 한줄은 해줘야 나머지가 모두 0이 들어갔습니다.

 

2)std::fill_n 이용

int arr[5][5];

fill_n(arr[0],25,1)

fill_n(arr,25,1)은 에러가 납니다.

arr, arr[0]의 메모리주소를 확인해보면 값은 같은데...

 

 

3)std:fill이용

int arr[5][5];

fill(arr[0],arr[0]+25,1);

 

 

참고: 배열의 원소개수 계산

 

 

전체 배열의 크기를 첫번재 원소의 값의 크기로 나누어 계산합니다.

 

int arr[5];

int arrSize=sizeof(arr)/sizeof(arr[0]); => 5

또는

int arrSize=sizeof(arr)/sizeof(*arr); => 5

 

int arr[5][5];

int size=sizeof(arr)/sizeof(*arr[0]); => 25

int size=sizeof(arr)/sizeof(arr[0][0]); => 25

 

int size=sizeof(arr)/sizeof(*arr); 는 5가 나옵니다.

 

이것과 아까 에러의 fill_n(arr,25,1)으로 유추해보면

arr는 배열을 원소로 가지는 1차원배열의 시작 주소를 의미하고

arr[0]이 그 1차원배열의 원소(배열)의 첫번째 원소를 의미하는 것 같습니다.

 

 

int size=sizeof(arr)/sizeof(*arr); sizeof(*arr)는

원소(배열)의 첫번째로 실제 2차원배열의 5개 원소중 하나를 의미,

fill_n(arr,25,1) 는

1차원배열로서 5개 원소인데 범위를 25로 크게 잡으니 에러가 되었다고 생각하고 있습니다.

 

 

 

C++ 배열 초기화 std::fill, std::fill_n .. 정리

BAEKJOON ONLINE JUDGE를 시작하게 된 계기가 C++과 친해지자였습니다. 지금은 많이 친해졌습니다만 의미를 잘 모르고, 혹은 잘못 알고 습관적으로 쓰는 것들이 있네요. 그 중 하나가 배열 초기화 입니

namwhis.tistory.com

 

'PL > C & C++' 카테고리의 다른 글

[C++] 무한대(infinity)  (0) 2021.07.16
[C++] 우선순위 큐(Priority Queue), pair<int, int>  (0) 2021.07.16
[C++] string to int  (0) 2021.06.23
[C++] vector  (0) 2021.06.21
[C&C++] 자료형  (0) 2021.04.22