C++11新特性:基于范围的for循环

在C++11中,介绍了一种新的for循环写法,基于范围的for循环。
与旧的for循环类似,也是用来对遍历容器中的所有元素,新的写法更加简洁方便。可以使用auto自动适配容器中的内容。为了遍历容器时提高效率,在访问容器内部时可以声明为元素的引用,进而避免不必要的对象拷贝。示例代码如下(代码节选自 cppreferance

std::vector<int> v = {0, 1, 2, 3, 4, 5};
for (const int& i : v) // access by const reference
{
    std::cout << i << ' ';
}
std::cout << '\n';

for (auto i : v) // access by value, the type of i is int
{
    std::cout << i << ' ';
}
std::cout << '\n';

for (int n : {0, 1, 2, 3, 4, 5}) // the initializer may be a braced-init-list
{
    std::cout << n << ' ';
}
std::cout << '\n';

int a[] = {0, 1, 2, 3, 4, 5};
for (int n : a) // the initializer may be an array
{
    std::cout << n << ' ';
}
std::cout << '\n';

for (int n : a)
{
    std::cout << 1 << ' '; // the loop variable need not be used
}
std::cout << '\n';

注意 std::map 的范围for循环遍历的写法
std::map 中存放的是 key-value pair 键值对,所以在遍历的时候每次拿到的是一个 pair ,在访问其中的元素时,需要注意书写方法。示例代码如下。

std::map<int, std::string> mapDemo;
for (auto& kvp : mapDemo)
{
    std::cout << kvp.first;
    std::cout << " - ";
    std::cout << kvp.second;
    std::cout << std::endl;
}

Comments

Comments powered by Disqus