[C++ in Coding Test] char형 2차원 배열을 같은 값으로 초기화 하는 방법

2024. 6. 5. 16:03자료구조 및 알고리즘/C++ 코딩테스트 스킬

728x90

Char형 2차원 배열을 같은 값으로 초기화 하는 방법

예시 시나리오 : char형 2차원 배열의 모든 값을 '$'로 초기화

1. memset 사용하기

memset 함수는 메모리의 내용을 특정 값으로 설정하는 함수로, 2차원 배열 전체를 동일한 값으로 빠르게 초기화할 수 있습니다. 다음은 memset을 사용하는 예시입니다.

#include <cstring> // memset 함수를 사용하기 위해 필요
#include <iostream>

int main() {
    const int rows = 5;
    const int cols = 10;
    char array[rows][cols];

    // memset을 사용해 array를 '$'로 초기화
    memset(array, '$', sizeof(array));

    // 결과 확인
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            std::cout << array[i][j] << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}

 

 

만약 사용법만 알고 싶다면 아래 참고!

#include <cstring> /* for using memset function */

char array[rows][cols];

/* memset을 사용해 array를 '$'로 초기화 */
memset(array, '$', sizeof(array));

 

2. std:fill을 이용한 char형 2차원 배열 초기화

std::fill은 C++의 알고리즘 라이브러리에서 제공하는 함수로, 범위를 정해 해당 범위를 특정 값으로 채웁니다. 2차원 배열에 std::fill을 사용하려면 배열을 1차원 배열로 취급해야 합니다. 다음은 std::fill을 사용하는 예시입니다.

#include <algorithm> // std::fill 함수를 사용하기 위해 필요
#include <iostream>

int main() {
    const int rows = 5;
    const int cols = 10;
    char array[rows][cols];

    // std::fill을 사용해 array를 '$'로 초기화
    std::fill(&array[0][0], &array[0][0] + sizeof(array), '$');

    // 결과 확인
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            std::cout << array[i][j] << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}

 

만약 사용법만 알고 싶다면 아래 참고!

#include <algorithm> /* std:fill을 사용하려면 <algorithm> 헤더를 이용해야 함*/

char array[rows][cols];

/* std:fill을 사용해 array를 '$'로 초기화 */
std::fill (&array[0][0], &array[0][0] + sizeof(array), '$');

 

2차원 배열에서의 std::fill 사용을 일반화를 하면

std::fill (배열의 시작 주소값, 배열의 시작 주소값 + 배열의 크기, 채우려는 문자);
/* 배열의 시작 주소값은 &배열명[0][0] */
/* 배열의 크기는 sizeof(배열명) */

 

 

2차원 배열 자료형에 따른 std::fill을 쓸 때 유의할 점

int형 2차원 배열의 경우 다음과 같이 써야함.

#include <algorithm>
int integer_array[rows][cols];
std::fill(&integer_array[0][0], &integer_array[0][0] + rows * cols, 초기화 값);

그 이유는 대부분의 시스템에서 char형은 1바이트를 차지하고, int의 경우 대부분의 시스템에서 4바이트를 차지해서...

디테일한 설명은 수정 진행 중

 

[연관글]

- std:fill 사용 방법 link) link 걸어놓을 예정

728x90