[C++] fill, fill_n 배열을 초기화 하는 방법, 2차원, 3차원 배열 초기화

2022. 4. 11. 15:55·이전 게시글/공부 관련

c++에서 배열을 초기화하는 방법으로 다음과 같은 초기화 방법이 있다

 

int a[3] = { 1, 2, 3 };
int b[3] = { 0 };
int c[] = { 0, 0, 0 };

 

 

이것은 정수형 배열을 초기화 하는 방법이고

정수형 배열에서 배열의 모든 값을 0이외의 숫자로 초기화 하는 방법은 어떤것이 있을까

 

 int d[3] = { 5 };

 

나는 처음에 이렇게 적으면 모든 값이 5로 초기화 되는 줄 알았다

 

 

하지만 결과는 그렇지 않았고 저렇게 적으면 0번째 요소에는 5가 들어가고 나머지 인덱스값에는 0으로 초기화 되는거였는데 이걸 제대로 알지 못했던것이었다

 

 

fill과 fill_n 함수

 

그러다가 fill과 fill_n이라는 함수를 알게되었다

fill과 fill_n 함수는 아래 홈페이지에서 영어로 자세히 설명되어있다

 

https://en.cppreference.com/w/cpp/algorithm/fill_n

https://en.cppreference.com/w/cpp/algorithm/fill

 

 

fill과 fill_n의 차이는

fill은 시작하는곳 부터 끝나는곳까지 채운다는것이고

fill_n은 시작하는곳 부터 얼마만큼 채울것인지로 이해했다

 

fill과 fill_n을 배열에서 사용하려면 다음과 같이 하면 된다

 

일단 fill과 fill_n은 <algorithm> 헤더에 정의되어있고 네임스페이스는 std라고 한다

내가 사용하는 비쥬얼스튜디오에서는 #include를 쓸필요는 없고 using namespace std;만 적으면 사용이된다

만약 오류가 난다면 #include <algorithm>를 입력해야할거같다

 

1차원 배열에서의 fill과 fill_n은 다음의 방법으로 사용할 수 있다

 

fill을 사용하는 방법

 

fill(시작 주소, 끝 주소, 변경 값);
int int_arr_1[9];

fill(int_arr_1, int_arr_1 + 9, 5);
fill(int_arr_1, int_arr_1 + sizeof int_arr_1 / sizeof int_arr_1[0], 5);

fill(&int_arr_1[0], &int_arr_1[9], 5);
fill(&int_arr_1[0], &int_arr_1[sizeof int_arr_1 / sizeof int_arr_1[0]], 5);

 

fill_n을 사용하는 방법

 

fill_n(시작 주소, 몇 번 할지, 변경 값);
int int_arr_1[9];

fill_n(int_arr_1, 9, 5);
fill_n(int_arr_1, sizeof int_arr_1 / sizeof int_arr_1[0], 5);

fill_n(&int_arr_1[0], 9, 5);
fill_n(&int_arr_1[0], sizeof int_arr_1 / sizeof int_arr_1[0], 5);

 

 

모두 동일한 결과가 나온다

 

여기서 만약 어디부터 어디까지 예를들면 두번째 인덱스부터 4번째 까지만 초기화를 한다면 다음 코드 처럼 하면된다

fill(&int_arr_1[1], &int_arr_1[4], 5);
fill_n(&int_arr_1[1], 3, 5);

 

 

2번째부터 4번째 까지만 초기화 하여 나머지 인덱스에는 이상한 값이 들어가 있다

 

그렇다면 2차원이나 3차원 배열에선 어떻게 하면될까

fill의 주소를 사용하려면 인덱스 끝을 잘 봐야한다

[인덱스-1][인덱스] 이렇게 해야 작동을 한다

 

int int_arr_2[9][6];

fill(&int_arr_2[0][0], &int_arr_2[8][6], 5);
fill_n(&int_arr_2[0][0], 9 * 6, 5);

 

 

3차원도 마찬가지로 2차원 하는것 처럼 하면 된다

 

int int_arr_3[3][4][2];

fill(&int_arr_3[0][0][0], &int_arr_3[2][3][2], 5);
fill_n(&int_arr_3[0][0][0], 3 * 4 * 2, 5);

 

 

상황에 맞게 fill과 fill_n을 구분해서 사용하면 될것같다

단순 모든 값을 초기화 할때는 fill_n이 편한것 같다

 

저작자표시 (새창열림)

'이전 게시글 > 공부 관련' 카테고리의 다른 글

[Level 1] 없는 숫자 더하기  (0) 2022.07.03
[Level 1] 신규 아이디 추천  (0) 2022.07.03
[C언어] 하샤드수 구하기, int 각 자릿수 더하기  (0) 2022.02.23
[파이썬] 달력 만들기 import turtle 사용 calendar 없이 만들기  (3) 2019.11.28
[파이썬] 숫자 맞추기 게임 from random import randint  (0) 2019.10.23
'이전 게시글/공부 관련' 카테고리의 다른 글
  • [Level 1] 없는 숫자 더하기
  • [Level 1] 신규 아이디 추천
  • [C언어] 하샤드수 구하기, int 각 자릿수 더하기
  • [파이썬] 달력 만들기 import turtle 사용 calendar 없이 만들기
aptenia
aptenia
공부하면서 배운 것들
  • aptenia
    새벽의 아이디어
    aptenia
  • 전체
    오늘
    어제
    • 분류 전체보기 (276)
      • f1tenth (2)
      • 이전 게시글 (268)
        • 개발 관련 (25)
        • 정보 관련 (19)
        • 공부 관련 (224)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 네이버 블로그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    이것이자바다연습문제
    파이썬
    마크스크립트
    티스토리스킨편집
    안드로이드
    마인크래프트스크립트
    티스토리HTML
    이것이자바다
    티스토리반응형2스킨편집
    C언어강좌
    반복하지않는수
    자바
    일본규슈공업대학교
    C언어
    콜라츠추측
    마인크래프트
    파이어베이스
    C++강좌
    마크
    c언어초보
    마인크래프트강화스크립트
    스크롤바CSS
    공개SW개발자대회
    캡스톤디자인
    이것이자바다확인문제
    프로그래머스
    빅데이터공모전
    컨텍스트스위칭
    프로그래머스PCCE
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
aptenia
[C++] fill, fill_n 배열을 초기화 하는 방법, 2차원, 3차원 배열 초기화
상단으로

티스토리툴바