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
同名的函数或成员函数发生了恶意冲突。