너무 당연한 것이지만 range base for에는 배열 뿐만이 아닌 STL의 컨테이너들도 사용할 수 있습니다.

아래 예제를 통해서 STL 컨테이너를 range base for문에서 어떻게 사용하는지 보겠습니다.

 

< 예제. 2 >

#include <iostream>

#include <vector>

#include <unordered_map>

#include <string>

 

int main()

{

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

 

           std::vector<int> NumberList;

           NumberList.push_back( 1 );

           NumberList.push_back( 2 );

           NumberList.push_back( 3 );

          

           for( auto i : NumberList )

           {

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

           }

           std::cout << std::endl;

 

 

 

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

 

           std::unordered_map<int, std::string> NumString;

           NumString.insert( std::make_pair<int, std::string>(1, "1") );

           NumString.insert( std::make_pair<int, std::string>(2, "2") );

           NumString.insert( std::make_pair<int, std::string>(3, "3") );

 

           for( auto i : NumString )

           {

                     std::cout << "key : " << i.first << ", value : " << i.second << std::endl;

           }

 

           std::cout << std::endl;

 

           return 0;

}

 

< 실행 결과 >


 

 

range base for문은 기본적으로 STL의 이터레이터를 지원하는 컨테이너라면 문제 없이 사용할 수 있습니다. 그러므로 프로그래머가 자신만의 컨테이너를 만든다면 STL에서 정의한 이터레이터의 기능을 구현하면 range base for 문을 사용할 수 있습니다.

 

이전에는 STL 컨테이너의 모든 요소를 반복문에서 사용할 때  for_each를 사용했는데 사용하기 위해서 준비해야 할 것이 많았는데 VC10에서 lambda 덕분에 쉬워졌습니다. 그러나 range base for 문과 비교해보면 for_each+lambda 보다는 range base for 문이 더 사용하기 편한 것을 알 수 있습니다.

 

이제 VC11부터 for 반복문은 꼭 range base for를 사용하기 바랍니다^^

저작자 표시
신고
by 흥배 2012.09.21 13:01

티스토리 툴바