c++ for循环有哪些用法 c++范围for循环技巧【必看】

10次阅读

传统 for 循环控制力强、结构清晰,由初始化、条件判断、迭代三部分用分号分隔;支持反向、步长非 1 遍历及多变量操作;现代 C ++ 推荐 auto 推导迭代器类型,且 erase 后需用其返回值更新迭代器。

c++ for 循环有哪些用法 c++ 范围 for 循环技巧【必看】

传统 for 循环:控制力强,适合索引操作

传统 for 循环结构清晰,由初始化、条件判断、迭代三部分组成,用分号分隔:for (int i = 0; i。它最适用于需要下标参与逻辑的场景,比如:

  • 按位置访问或修改数组 / 容器元素(如 arr[i] = i * 2)
  • 反向遍历(for (int i = n – 1; i>= 0; –i)
  • 步长非 1 的遍历(for (int i = 0; i)
  • 嵌套循环处理二维结构(如矩阵行列索引)

注意:循环变量 作用域 限于 for 语句内;若需在循环后继续使用,应在外部声明。

范围 for 循环:简洁安全,专注元素本身

C++11 起支持的 range-based for 语法为 for (auto& x : container),自动调用 begin()end(),省去索引管理。核心技巧包括:

  • 只读访问用 const auto&(避免拷贝大对象或临时字符串)
  • 需修改原值时用 auto&(如 for (int& x : vec) x *= -1;
  • 类型不确定时优先写 auto,而非硬 编码 类型(提升泛型性)
  • 支持数组、std::vectorstd::arraystd::string等标准容器

不支持纯指针数组(如 int* p = new int[5]),也不适用于运行时才确定范围的表达式(如函数返回临时容器时,C++23 前需先赋值给变量再遍历)。

立即学习C++ 免费学习笔记(深入)”;

迭代器 for 循环:通用性强,适配所有 STL 容器

std::liststd::map 等不支持随机访问的容器,必须用迭代器方式:

  • for (auto it = c.begin(); it != c.end(); ++it) —— 显式控制,兼容旧标准
  • 配合解引用 *it 访问元素,可安全修改(it->second = …… 用于 map)
  • 现代写法推荐 auto 推导迭代器类型,避免冗长声明(如 std::map::iterator

注意:避免在循环中 erase 迭代器后仍 ++it,应使用 erase 返回的新迭代器。

实用细节与避坑提醒

几种常见但易错的写法需留意:

  • 省略某一部分:如 for (; condition;)for (int i = 0; ; ++i),后者是无限循环,必须内部有 break
  • 逗号表达式可用于多变量初始化或更新:for (int i = 0, j = n-1; i
  • 范围 for 中不要直接写函数调用作为容器源(如 for (auto x : getVec())),C++23 前可能引发临时对象生命周期问题,应先存为局部变量
  • 容器为空时,范围 for 自动跳过,无需额外判空;而传统 for 若依赖 size(),注意 size() 返回无符号类型,减 1 可能溢出

选哪种,关键看需求:要下标就用传统 for,要干净遍历优先范围 for,要最大兼容性就用迭代器 for。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-26发表,共计1183字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources