Taaewoo
Data Engineering Blog
Taaewoo
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • Computer Science (16)
      • Algorithm (6)
      • OS (1)
      • Java (2)
      • C++ (6)
      • Python (1)
    • Hadoop Ecosystem (27)
      • Hadoop (6)
      • Spark (5)
      • NiFi (6)
      • Hive (9)
      • Kafka (1)
    • BigData Engineering (14)
      • Jupyter (1)
      • Docker (3)
      • CDH (3)
      • Riot Data Pipeline (7)
    • Back-end 개발 (0)
      • Spring (0)
    • Algorithm 문제 풀이 (9)
      • 백준 (5)
      • LeetCode (4)
    • Conference (1)
      • LINE DEVELOPER DAY 2021 (1)
      • if(kakao) 2021 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • docker
  • hdfs
  • hadoop
  • algorithm
  • kafka
  • metastore
  • NiFi
  • CS
  • 알고리즘
  • 정렬
  • BigData
  • sort
  • java
  • spark
  • 프로그래밍
  • 빅데이터
  • C++
  • Hive
  • Coding
  • 코딩

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Taaewoo

Data Engineering Blog

[C++] 2차원 배열 특정 값 초기화
Computer Science/C++

[C++] 2차원 배열 특정 값 초기화

2021. 1. 17. 00:03

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
    'Computer Science/C++' 카테고리의 다른 글
    • [C++] Split #1 - String delimiter split 함수 구현
    • [C++] 2차원 배열 행렬 바꾸기
    • [C++] 2차원 배열 90도 회전
    • [C++] 구조체 생성자 오버로딩 Struct Constructor Overloading
    Taaewoo
    Taaewoo

    티스토리툴바