C ++ 11 범위 기반 for () 루프의 일반적인 예는 항상 다음과 같이 간단합니다.
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
std::cout << xyz << std::endl;
}
어떤 경우에는 xyz
입니다 int
. 그러나지도와 같은 것이 있으면 어떻게됩니까? 이 예제에서 변수의 유형은 무엇입니까?
std::map< foo, bar > testing = { /*...blah...*/ };
for ( auto abc : testing )
{
std::cout << abc << std::endl; // ? should this give a foo? a bar?
std::cout << abc->first << std::endl; // ? or is abc an iterator?
}
통과하는 컨테이너가 간단한 경우 범위 기반 for () 루프가 반복자가 아닌 각 항목을 제공하는 것처럼 보입니다. 좋은 점입니다 ... 반복자라면, 우리가 항상해야 할 일은 어쨌든 그것을 역 참조하는 것입니다.
그러나 나는지도와 멀티 맵과 같은 것들에 관해서는 무엇을 기대 해야하는지 혼란 스럽습니다.
(나는 여전히 g ++ 4.4를 사용하고 있지만 범위 기반 루프는 g ++ 4.6 이상이므로 아직 시도 할 기회가 없었습니다.)
std::begin
및std::end
동일한 이름의 함수 또는 멤버 함수 와 불쾌하게 춤을 추습니다 .