C++ 面试题 目录

C++11 中基于范围的 for 循环 (range-based for loop) 的用法?

推荐答案

在 C++11 中,基于范围的 for 循环(range-based for loop)提供了一种简洁的方式来遍历容器或数组中的元素。其基本语法如下:

  • declaration:定义一个变量,用于存储当前遍历到的元素。
  • range:表示要遍历的容器或数组。

示例代码

-- -------------------- ---- -------
-------- ----------
-------- --------

--- ------ -
    ---------------- --- - --- -- -- -- ---

    -- ------- --- ---- ------
    --- ---- --- - ---- -
        --------- -- --- -- - --
    -

    ------ --
-

输出结果:

本题详细解读

1. 语法解析

基于范围的 for 循环的语法非常简洁,主要由两部分组成:

  • declaration:定义一个变量,用于存储当前遍历到的元素。这个变量可以是值类型、引用类型或常量引用类型。

    • 值类型:for (int val : vec),每次循环时,valvec 中元素的副本。
    • 引用类型:for (int& val : vec)valvec 中元素的引用,可以直接修改容器中的元素。
    • 常量引用类型:for (const int& val : vec)valvec 中元素的常量引用,不能修改容器中的元素。
  • range:表示要遍历的容器或数组。range 必须是一个可以返回迭代器的对象,比如标准库中的容器(std::vectorstd::list 等)或原生数组。

2. 使用场景

基于范围的 for 循环适用于以下场景:

  • 遍历标准库容器:如 std::vectorstd::liststd::map 等。
  • 遍历原生数组:可以直接遍历数组中的元素。
  • 遍历自定义容器:如果自定义容器实现了 begin()end() 方法,也可以使用基于范围的 for 循环。

3. 注意事项

  • 性能考虑:如果遍历的是大型对象,使用引用类型(&)可以避免不必要的拷贝,提高性能。
  • 常量性:如果不需要修改容器中的元素,建议使用常量引用(const&)来避免意外的修改。
  • 空容器:如果容器为空,基于范围的 for 循环不会执行循环体。

4. 示例扩展

遍历数组

输出结果:

使用引用修改容器元素

-- -------------------- ---- -------
---------------- --- - --- -- -- -- ---

--- ----- --- - ---- -
    --- -- --  -- --------
-

--- ---- --- - ---- -
    --------- -- --- -- - --
-

输出结果:

遍历 std::map

输出结果:

通过以上示例可以看出,基于范围的 for 循环在 C++11 中极大地简化了遍历容器和数组的代码,提高了代码的可读性和简洁性。

纠错
反馈