当前位置: 首页 > news >正文

C++中的for-each循环

文章目录

      • 基本语法
      • 举例说明
        • 1. 遍历数组
        • 2. 遍历`std::vector`
        • 3. 遍历容器中的对象
        • 4. 使用引用修改元素
        • 5. 使用`const`保护元素
      • 范围循环的使用注意事项
      • 总结

C++中的范围循环(Range-based for loop),也称为for-each循环,是C++11引入的一种简化数组或容器遍历的循环方式。相比传统的for循环,for-each更加简洁且不容易出错,特别是在遍历STL容器时。

基本语法

范围循环的语法结构如下:

for (declaration : range_expression) {// loop body
}
  • declaration:用于定义循环中的迭代变量(类似于传统for循环中的计数器)。
  • range_expression:需要遍历的容器、数组或范围。

举例说明

我们通过几个例子来讲解范围循环的使用。

1. 遍历数组
#include <iostream>int main() {int arr[] = {1, 2, 3, 4, 5};// 使用范围循环遍历数组for (int num : arr) {std::cout << num << " ";}return 0;
}

输出:

1 2 3 4 5

在这个例子中,int num 是声明的循环变量,它会依次获取arr数组中的每一个元素。

2. 遍历std::vector
#include <iostream>
#include <vector>int main() {std::vector<int> vec = {10, 20, 30, 40, 50};// 使用范围循环遍历 vectorfor (int num : vec) {std::cout << num << " ";}return 0;
}

输出:

10 20 30 40 50

与遍历数组类似,这里通过范围循环可以简洁地遍历std::vector中的元素。

3. 遍历容器中的对象

范围循环不仅可以遍历简单的基本类型数组或容器,也可以用来遍历容器中的对象:

#include <iostream>
#include <vector>struct Person {std::string name;int age;
};int main() {std::vector<Person> people = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 35}};// 使用范围循环遍历对象for (const Person& person : people) {std::cout << person.name << ": " << person.age << "\n";}return 0;
}

输出:

Alice: 25
Bob: 30
Charlie: 35
4. 使用引用修改元素

范围循环可以通过引用访问元素,从而对容器中的元素进行修改。如果不使用引用,循环中得到的只是元素的副本,无法对原数组或容器中的元素进行修改。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用引用来修改元素for (int& num : vec) {num *= 2;  // 将每个元素翻倍}// 输出修改后的容器for (int num : vec) {std::cout << num << " ";}return 0;
}

输出:

2 4 6 8 10

通过int& num,我们可以访问并修改vec容器中的每个元素。

5. 使用const保护元素

有时候我们不希望在循环中修改元素,可以使用const来确保元素不会被修改:

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {10, 20, 30, 40, 50};// 使用 const 来防止修改元素for (const int& num : vec) {std::cout << num << " ";}return 0;
}

这里的const int&确保了num只是一个只读的引用,无法在循环内部对其进行修改。

范围循环的使用注意事项

  1. 迭代副本与引用

    • 如果在范围循环中不使用引用(如for (int num : vec)),则会遍历每个元素的副本,无法对原数组或容器进行修改。
    • 如果使用引用(如for (int& num : vec)),则可以直接修改原数组或容器的元素。
  2. 常量性保护

    • 通过使用const关键字,可以确保元素在循环中不会被修改,确保数据的安全性。
  3. 适用范围

    • 范围循环适用于所有可以使用begin()end()方法的容器,例如数组、std::vectorstd::liststd::set等STL容器。
  4. 不可用于某些C++98容器

    • C++98/03标准中的某些自定义容器没有提供begin()end()方法,因此无法直接使用范围循环。

总结

范围循环是C++中遍历容器、数组的一种简洁、直观的方式,能减少代码的复杂度,提高代码的可读性。通过对引用与常量的合理使用,可以更灵活地控制数据访问与修改。


http://www.mrgr.cn/news/24939.html

相关文章:

  • C++力扣简单算法题整理-2(字符串、数组)
  • 一天认识一个硬件之主板
  • 资源监视器
  • 计算机毕业设计2025题目出炉,如何选择和流程分析看这一篇就够了
  • mysql 学习笔记三
  • MAC 地址简化概念(有线 MAC 地址、无线 MAC 地址、MAC 地址的随机化)
  • 04 Room
  • 软件测试中的黑盒测试方法,包括其定义、目的及主要步骤。
  • 优化你的MySQL查询:12个必备的SQL书写习惯!
  • Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)
  • 设计模式之装饰设计模式
  • 城市道路街景的绿视率计算 绿化率计算(包括街景的获取)
  • 非线性规划及其MATLAB实现
  • 021.PL-SQL控制结构
  • 嵌入式硬件基础知识
  • Centos7.9下的snmp搭建及实例
  • 第 7 篇 Helm 部署 Nacos【详细步骤】
  • Java控制台+activiti+springboot+mybatis实现账务报销工作流程
  • 华为OD机试 - 周末爬山 - 广度优先搜索BFS(Python/JS/C/C++ 2024 E卷 200分)
  • 通用与专用LabVIEW软件版本对比