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 문을 사용할 때 종료 조건이 잘못되어 메모리 침범을 하는 위험도 피할 수 있게 되었습니다.
'C++0x' 카테고리의 다른 글
[ VC11-C++11 ] range base for - 1 (3) | 2012.08.21 |
---|---|
[ VC11-C++11 ] chrono - clock 클래스 (1) | 2012.08.14 |
[ VC11-C++11 ] chrono - 시간 계산 (0) | 2012.08.07 |
[ VC11-C++11 ] chrono - 시간 측정하기 (0) | 2012.07.31 |
[ VC11-C++11 ] enum - 전방선언 (0) | 2012.07.23 |
[ VC11-C++11 ] enum - unscoped enumeration과 scoped enumeration (0) | 2012.07.16 |
댓글을 달아 주세요
글 제목에 -1 이라고 되어 있지 않나요?
아직 관련 글이 더 올라올 소지가 있는데도 불구하고 말씀하시는건 성급하다고 볼수도있겠네요.
아직 더 기다려보시고 해당 관련 글을 모두 보신 다음에 댓글하시는게 좋지 않나 싶습니다. 좀 더 기다려 보세요 ㅎㅎ
사실 예제코드는 부실한게 맞습니다.^^;
이유는 정말 좋은 예제를 만들려면 그만큼 많은 시간을 필요로하는데 제가 그런 시간이 부족하기 때문입니다. 아마 여기 글 적는 것이 제 일이라면 예제나 글 퀄리티에 많은 시간을 소비해서 더 좋게 만들겠지만 블로그 글 올리는 것이 남는 시간을 투자하는 것이고, 공부도 제가 C++11만 공부하는 것이 아니라서 여기에 소비하는 시간이 그렇게 많지 않은편입니다.
그러니 제가 만든 예제는 기능의 동작 방법에 대한 이해로만 받아드시고 이것을 더 좋게 활용하는 것은 직접 고민해 보시는 것이 좋을 듯 합니다^^;
passion // 아닙니다. 예제의 부실함은 저도 고민을 하는 부분입니다. 그래서 변명겸해서 댓글을 남겼습니다^^;. 오히려 무플보다 passion님처럼 의견 남겨주시는 것이 훨씬 더 좋습니다 ㅎㅎ