유용한 정보

c++ array 배열 초기화 하는 방법

cosmohoo 2020. 7. 3. 16:40
반응형

알고리즘 문제를 풀 때 배열을 초기화해야 하는 경우들이 있습니다. 

해당 방법을 정리해보았습니다. 

 

 

1.간단한 배열 초기화 방법

    int arr[3] = {0,1,1};

 

 

 

2. Bool형 배열 초기화 방법

    bool arr2[3] = {false};

=> 이와 같은 방법으로 초기화 시, 초기값들을 모두 false로 초기화할 수 있습니다. 

=> 이와 같은 방법을 사용할 시, 처음 값만 설정한 값으로 설정되며 나머지 값은 false로 초기화됩니다. 

bool arr[3] = {true, true, true};

=> 이와 같은 방법으로 배열을 모두 true로 초기화 할수 있습니다. 

 

 

3. 선언한 뒤에 함수를 통해 초기화하는 방법 - fill_n

    fill_n(arr2, 3, true);

=> 초기화하려는 배열의 주소(배열의 이름이 주소), 초기화하려는 배열의 구간, 초기화할 값의 parameter를 넘겨주어 실행합니다.

 

 

 

4. 선언한 뒤에 직접 초기화하는 방법

for(int i=0; i<3; i++)
    {
        arr2[i] =true;
    }

=> for문을 통해 직접 초기화할 수 있습니다. 

 

 

5.memset

void * memset ( void * ptr, int value, size_t num );
    memset(arr2, true, sizeof(arr2));

=> 배열의 시작점(배열의 시작 포인터, 배열의 이름) , 채울 값, 채우고 싶은 범위의 parameter를 넘겨주어 실행합니다.

** memset을 사용하는 이유는 for문보다 더 빠른 속도의 실행을 할 수 있기 때문입니다.

** 컴퓨터의 아키텍처와 컴파일러의 종류마다 다르기 때문에 꼭 그렇다고는 할 수 없지만, 해당 함수를 사용하는 것은 추천됩니다. 

 

 

6. 전역변수, 지역변수의 차이점 

=> 전역변수를 선언하고 특정한 값을 대입하지 않는다면 BSS영역에 저장되며 "자동"으로 "0"으로 초기화가 됩니다. 

=> 지역변수의 경우 스택에 저장되어 자동으로 초기화되지 않습니다. 

전역변수 : 초기화필요 없이 "0"으로 초기화

지역변수 : 초기화 필요

프로그래머스를 보면 전역변수를 선언시 꼭 초기화하라는 문구가 나옵니다. 이러한 실수를 줄여주기 위한 TIP으로 보입니다. 

 

 

 

 


 

-2021.12.30 에 6번을 추가하였습니다. 

반응형