【发布时间】:2011-10-21 06:57:47
【问题描述】:
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+ 中,所以我还没有机会尝试。)
【问题讨论】:
-
范围 for 语句与标准库
std::begin和std::end函数或同名成员函数进行了一场邪恶的舞蹈。 -
@will 在一个 3 行示例中,您是否被假变量名所困扰?
标签: c++ c++11 for-loop dictionary