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 |