[ VC11-C++11 ] range base for - 1

C++0x 2012.08.21 19:20 Posted by 흥배

VC10에서 선보였던 C++11의 기능 중 강력하면서 사용하기 쉽고, 자주 사용한 기능이 아마 'auto'이지 않을까 생각합니다. 예전에 강연을 할 때 auto와 관련된 예제를 보여드리면 많은 분들이 아주 좋아하시더군요(좀 놀라기도 하시더군요^^). 어떤 분들은 딴 건 제쳐두고 이것 때문이라도 VC10을 사용해야겠다는 분들이 있었습니다.

 

이번 VC11에서도 'auto'와 같은 강력한 기능이 있습니다. 바로 'range base for' 입니다. 이것을 사용하면 반복문을 아주 쉽고, 강력하게 사용할 수 있습니다.

VC 특화 기능인 for each와 비슷하기 때문에 기존에 for each를 사용하고 있다면 이제는 range base for로 쉽게 바꾸어서 사용하면 됩니다.

 

 

예제를 통해 일반적인 for , VC for each, range base for문의 차이를 예제를 통해서 보겠습니다.

 

< 예제. 1 >

#include <iostream>

int main()

{

           int NumberList[5] = { 1, 2, 3, 4, 5 };

 

          

           std::cout << "일반적인 for " << std::endl;

          

           for( int i = 0; i < 5; ++i )

           {

                     std::cout << i << std::endl;

           }

 

 

           std::cout << "VC++ 특화의 for each" << std::endl;

 

           for each( int i in NumberList )

           {

                     std::cout << i << std::endl;

           }

 

 

           std::cout << "range base for " << std::endl;

 

           for( auto i : NumberList )

           {

                     std::cout << i << std::endl;

           }

 

           return 0;

}

 

< 실행 결과 >


<예제.1>을 보면 일반적인 for 문은

for( int i = 0; i < 5; ++i )

와 같이 시작과 종료 조건, 증가 값 이렇게 3개의 조건에 의해서 반복 됩니다.

 

그러나 range base for문은 VC만의 반복문인 for each와 비슷하게 데이터셋 변수와 이 데이터셋 요소의 타입을 선언하면 됩니다.

for( auto i : NumberList )

 

기존의 for 문에 비해서 또는 for each 보다도 간편해졌고, for each는 표준이 아닌 VC만의 기능인 것에 비해서 range base for C++ 표준 기능입니다.

 

range base for 문의 문법은 아래와 같습니다.

for ( for-range-declaration : expression ) statement

  

range base for 덕분에 반복문의 사용이 쉬워졌고, for 문을 사용할 때 종료 조건이 잘못되어 메모리 침범을 하는 위험도 피할 수 있게 되었습니다.

댓글을 달아 주세요

  1. 풍풍풍 2012.08.22 09:47  댓글주소  수정/삭제  댓글쓰기

    글 제목에 -1 이라고 되어 있지 않나요?
    아직 관련 글이 더 올라올 소지가 있는데도 불구하고 말씀하시는건 성급하다고 볼수도있겠네요.
    아직 더 기다려보시고 해당 관련 글을 모두 보신 다음에 댓글하시는게 좋지 않나 싶습니다. 좀 더 기다려 보세요 ㅎㅎ

  2. 흥배 2012.08.22 21:54 신고  댓글주소  수정/삭제  댓글쓰기

    사실 예제코드는 부실한게 맞습니다.^^;
    이유는 정말 좋은 예제를 만들려면 그만큼 많은 시간을 필요로하는데 제가 그런 시간이 부족하기 때문입니다. 아마 여기 글 적는 것이 제 일이라면 예제나 글 퀄리티에 많은 시간을 소비해서 더 좋게 만들겠지만 블로그 글 올리는 것이 남는 시간을 투자하는 것이고, 공부도 제가 C++11만 공부하는 것이 아니라서 여기에 소비하는 시간이 그렇게 많지 않은편입니다.
    그러니 제가 만든 예제는 기능의 동작 방법에 대한 이해로만 받아드시고 이것을 더 좋게 활용하는 것은 직접 고민해 보시는 것이 좋을 듯 합니다^^;

  3. 흥배 2012.08.23 17:36 신고  댓글주소  수정/삭제  댓글쓰기

    passion // 아닙니다. 예제의 부실함은 저도 고민을 하는 부분입니다. 그래서 변명겸해서 댓글을 남겼습니다^^;. 오히려 무플보다 passion님처럼 의견 남겨주시는 것이 훨씬 더 좋습니다 ㅎㅎ