본문 바로가기
Programming/c++

[c++] range based for 사용하기 (for 문 간단히 사용하기!!!)

by 악마근육남 2020. 8. 30.
반응형

하 진짜.... 이게 내 길인지 모르겠다.

그냥 적성에도 안 맞는거 꾸역 꾸역 하고 있는 느낌인데... 나이도 이제 적지 않은데 이거 이렇게 잡고 있는게 맞는가 하.... 

깝깝함


암튼 일단 프로그래밍을 언어를 배우게 되면 우선 가장먼저 배우는게 두 가지가 있는데 내 생각에는 바로

1. if 

2. for

라고 생각한다. if는 분기처리 for는 반복

if는 사람이 판단하는것 처럼 조건을 걸어 컴퓨터 대신에 사람이 판단조건을 넣어주고

for는 사람이 할 수 없는 컴퓨터의 특기인 엄청난 양의 반복을 시키는 명령어 이다.

가장먼저 배우기 때문에 나같이 하 프로그래밍에 특별히 재능이 없거나 크게 목숨걸지 않는 사람들은 제일 처음 배운 그 원형 형태의 for 문을 사골을 우려먹을때 까지 사용할거다.

하 그런데 나처럼 짬이 좀 찾는데 아직도 그 원형 형태의 for 문을 사용하면 선배님들에게 한소리 듣기 좋다.

일단 내가 처음 배운 이후로 주구 장창 잘 사용하고 있는 for 문을 보자.

옛날 초보 방식

std::string subject[] = {"국어", "영어", "수학"};

for (int i = 0; i < sizeof(subject); i++) {
        std::cout << subject[i] << std::endl;
    }

이렇게 라도 사용하면 다행이다.

더 초창기에는

for (int i = 0; i < 3; i++) {
        std::cout << subject[i] << std::endl;
    }

내 추측으로 i가 3보다 크면 안되니 판단해서 거의 하드코딩으로 범위를 지정해 줬었다.

하지만 특별한 이유없이 이런식으로 코드를 작성하면 개무시 받기 좋고  c++11 부터 사용할 수 있는 range-based loop를 모른다면 더욱 비참해지기 마련이니 혹시라도 지금 이글을 보시는 분들중에 몰랐던 분은 조금만 시간 투자해서 같이 보도록 하자. 

투자한 시간은 10분 남짓일텐데 아마 지킬수 있는 자존감은 그 값을 넘어서고도 남을 것이다. 나야 뭐... 이미 너덜너덜해졌지만.... 하 그냥 평생 게임만 하면서 살고 싶은데... 세상살이가 그렇게 되지 않는다.


range based for 사용하기

하 

일단 위 내용을 기준으로 지금 나는 subject라는 배열 안에 든 값을 출력을 하고 싶은거다.

그러면 힘들게 subject 사이즈를 구할 필요없이 c++11 에서 제공하는 기능을 사용하면 배열의 크기를 알아서 판단해서 for 문을 돌려 준다.

구체적인 문법은 이렇다.

    std::string subject[] = {"국어", "영어", "수학"};
    
    for (std::string i : subject) {
        std::cout << i << std::endl;
    }

기존 for 문처럼 () 안에 3항을 넣어주는것이 아니라 

i ==> 순환하며 값을 받을 변수

: ==> 구분자

subject  ==> 순환하며 값을 읽을 배열

이렇게만 주면 알아서 c++ 이 내부적으로 사이즈를 판단해 배열을 출력해주는 것이다. 

여기서 한번더 간단하게 할 수 있다. 

   std::string subject[] = {"국어", "영어", "수학"};
    
    for (auto i : subject) {
        std::cout << i << std::endl;
    }

i의 타입을 auto로 넣어주면 알아서 subject 안에서 순환하는 타입을 판단해서 i를 선언하고 값을 넣어준다. 

이렇게 함으로써 코드 가독성이 좋아지고 사이즈 판단을 잘못해서 불필요한 오류가 발생할 가능성을 줄일 수 있는 것이다.

코드가 좋아지니 적극적으로 활용하도록 하자!

아 그리고 usging namespace std; 이거 쓰면 또 욕쳐먹기 좋으니까 사용하지 말자. 

이유는 다음 포스팅에!!

반응형

'Programming > c++' 카테고리의 다른 글

c++ include 시 <> 와 "" 의 차이  (0) 2020.08.23
[맥] 맥에서 C++ 사용하기!!!  (0) 2020.02.01
알고리즘에 쏠쏠한 swap 함수  (0) 2019.08.20