C++11의 새로운 기능 중 'SCARY iterator' 라는 것이 있습니다. 단순히 한국말로 바꾸면 '무서운 반복자' 라고 할 수 있는데 사실 무섭지는 않습니다.^^;

 

SCARY iterator에 대해서 아주 간단하게 말하면 컨테이너를 선언할 때 템플릿에 들어가는 데이터 타입만 같다면 비교 함수나 메모리 할당자가 서로 달라도 같은 반복자를 사용할 수 있게 해줍니다(만약 메모리 할당자의 차이에 의해서 이상한 결과가 나올 수도 있어서 무서운 이라는 단어를 사용하지 않았나 생각합니다);

 

SCARY iterator가 구현 되기 전에는 아래와 같이 데이터 타입은 같으나 비교 함수가 서로 다른


std::set< int, std::less<int> > map1;

std::set< int, std::greater<int> > map2;


에서 map1 map2의 반복자는 서로 같지 않습니다. 분명히 int라는 같은 타입을 사용해서 같은 반복자를 사용해도 문제 없

을 거라고 생각되지만 비교 함수가 서로 틀려서 반복자는 서로 다른 타입으로 취급합니다. 그래서 아래의 코드는 컴파일 에러가 발생합니다.

 

std::set<int, std::less<int>>::iterator Iter = b.begin();

 

그러나 C++11SCARY iterator가 구현된 VC11에서는 위의 코드는 전혀 에러가 발생하지 않습니다.

 

VC11처럼 SCARY iterator가 구현된 컴파일러에서는 컨테이너의 데이터 타입만 같다면 같은 반복자를 사용할 수 있게 되었습니다.

 

 


 

참고 : http://blogs.wankuma.com/episteme/archive/2013/01/11/311581.aspx

 

저작자 표시
신고
by 흥배 2013.03.21 08:00
| 1 |