컴퓨터 언어/C++

[c++] 배열의 초기화

  • -
728x90
반응형

일반적으로 c++에서는 초기화한 크기가 배열의 크기보다 더 작은 경우에는 나머지는 모두 0으로 초기화 된다.

 

하지만, 0이 아닌 다른 수로 초기화 하고 싶을 때는 다음과 같은 방법을 이용해주면 된다.

(단, 아래의 방식은 반드시 using namespace std;를 선언해주고 이용해야 한다. 그렇지 않다면 아래에 나오는 내용을 사용하려면 앞에 꼭 namespace인 std::를 꼭 붙어야 한다.)

 

1. fill_n 함수를 이용한다.

 

이 방식은 배열을 선언한 이후에 함수를 호출하여 원하는 배열의 Index에 숫자를 집어넣어주는 것이다.

 

사용 방법은 다음과 같다.

fill_n(원하는 배열 시작 주소, 변경을 원하는 배열 Index 갯수, 변경하기를 원하는 숫자)

 

시작 주소라는 표현이 낯설수는 있으나, c의 포인터 부분에서 배운 것 처럼 배열의 이름은 배열의 0번째 주소를 의미하는 포인터이다.

 

즉, 만약 원하는 배열 시작 주소에 배열의 이름을 집어넣게 되면 처음부터 변경을 할 수 있다.

 

이를 활용하여 시작지점과 끝 지점을 사용자가 스스로 결정하여 원하는 부분만 수정할 수 있게 된다.

 

위의 내용을 코드로 정리하면 다음과 같다.

#include <iostream>

using namespace std;

int main(void){
    int want_array[5];
    fill_n(want_array, 5, 3);
    cout << want_array[2];
    return 0;
}

2. fill 함수를 이용한다.

 

fill_n 함수와 기본적인 골격은 동일하나 가운데 parameterr가 변경을 원하는 배열 index 갯수에서 끝나는 배열의 주소로 변경되었을 뿐이다.

 

다만, 끝나는 주소는 변경되지 않는다는 것을 주의해야 한다.

 

위의 내용을 코드로 정리하면 다음과 같다.

#include <iostream>

using namespace std;

int main(void){
    int want_array[5];
    fill(want_array + 1, want_array + 4, 3);
    cout << want_array[2];
    return 0;
}

즉, 위의 코드를 보면 want_array[1]부터 want_array[3]까지 3으로 초기화되었음을 이해할 수 있다.

이때, want_arry[4]가 빠졌음을 주의해야 한다.

 

 

2차원 배열 이상도 위와 비슷한 방식으로 진행해주면 된다.

 

실제로 위의 관점을 이용하여 해당하는 문제를 풀면 다음과 같다.

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main(void){
    int a, b ,c, result;
    string result_string;
    
    // Store num

    int num_store[10];
    fill_n(num_store, 10, 0);
    
    
    // Input data 
    
    cin >> a;
    cin >> b;
    cin >> c;

    result = a * b * c;
    result_string = to_string(result);

    int len_of_result = result_string.length();
    
    for(int i = 0; i < len_of_result; i++){
        int value = result_string[i] - 48;
        num_store[value] += 1;
    }

    for(int i = 0; i < 10; i++){
        cout << num_store[i] <<"\n";
    }
}

위의 문제를 접근하기 위해서 0~9를 카운트하기 위한 배열을 미리 깔아놓았는데 그러기 위해서는 0으로 미리 초기화를 시켜놓아야 한다.

 

물론 이 문제의 경우에는 0으로 초기화를 시키는 것이므로 간단하게 num_store[10] = {0} 이런식으로 처리를 해도 무방하지만

fill_n을 활용하여 해당하는 배열을 초기화시켰다.

 

잘 복습하도록 하자.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.