2차원 배열 값 할당
2차원으로 선언된 배열을 fill 함수를 사용하여 특정 값을 할당시킬 수 있습니다.
fill( 시작 주소, 끝 주소, 값 )
fill() 함수를 적용시켰을 때 배열의 값이 바뀌는 범위는 [시작주소, 끝 주소) 입니다.
C++에서 배열 값을 특정 값으로 설정하는 함수들이 존재합니다. 대표적으로 memset(), fill() 함수가 있습니다.
하지만 memset()의 경우 초기화시킬 수 있는 값은 0과 -1로 제한이 됩니다. 알고리즘 문제를 풀 때 보통 0으로 초기화시키는 경우가 많아서 memset()을 흔히 사용하긴 하지만, 가끔씩 0과 -1이 아닌 값으로 초기화시키고 싶을 때가 있습니다. 이럴 때 memset() 함수를 사용하지 못하는 점이 아쉽긴 합니다. 하지만 memset()을 사용하는 경우 2차원 배열의 초기화는 쉽습니다. 아래와 같이 memset( 시작 주소, 값, 크기 )를 맞춰주면 되기 때문에 sizeof()를 이용해서 세 번째 argument를 쉽게 채울 수 있습니다.
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int arr[10][10];
memset(arr, 0, sizeof(arr));
}
fill()의 경우에는 memset()과 다르게 0과 -1을 포함한 특정한 값으로 초기화를 시킬 수 있습니다. 함수에 전달하는 argument가 조금 다르지만 fill( 시작 주소, 끝 주소, 값 ) 를 맞춰주면 원하는 기능을 실행시킬 수 있습니다. 참고로 fill() 함수를 통해 값이 설정되는 범위는 [시작 주소, 끝 주소) 입니다. 그래서 일반적으로 1차원 배열을 fill() 함수를 통해 초기화를 시킬 땐 아래와 같이 이용합니다.
#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, const char * argv[]) {
int arr[50];
fill(arr, arr+50, 5);
}
하지만 기존에 fill() 함수를 1차원 배열에만 적용시킨 사용자들은 2차원 배열에 적용시킬 때 헷갈리는 경우가 있습니다. 결국에 fill() 함수의 parameter는 같기 때문에 배열의 특성을 알고 있다면 쉽게 적용시킬 수 있습니다. 2차원 배열의 경우 arr[50][50]이 존재할 때 arr의 시작 주소를 나타내는 것은 arr[0]이고 가장 마지막 주소는 arr[49][49]의 주소입니다. 하지만 fill() 함수의 parameter 중 두 번째 parameter인 끝 주소는 범위에 포함시키지 않기 때문에 arr[49][49]의 주소 +1을 해줘야 합니다. 그래서 결국 parameter에 넣어줘야 하는 값은 arr[50]입니다. 사용 예시는 아래와 같습니다.
#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, const char * argv[]) {
int arr[50][50];
fill(arr[0], arr[50], 5);
}
'Computer Science > C++' 카테고리의 다른 글
[C++] Split #2 - multiple delimiter split 함수 구현 (0) | 2021.02.02 |
---|---|
[C++] Split #1 - String delimiter split 함수 구현 (0) | 2021.01.28 |
[C++] 2차원 배열 행렬 바꾸기 (0) | 2021.01.25 |
[C++] 2차원 배열 90도 회전 (2) | 2021.01.23 |
[C++] 구조체 생성자 오버로딩 Struct Constructor Overloading (0) | 2021.01.10 |