網站首頁 編程語言 正文
1、概念
// 普通的for循環 for(表達式 1; 表達式 2; 表達式 3) { // 循環體 } // 基于范圍的for循環 for (declaration : expression) { // 循環體 }
1.1、普通的for循環
它的工作流程是:
1、執行表達式 1
2、如果表達式 2 為 true,則執行循環體,否則跳出循環
3、執行表達式3,會到第二步,重復執行。
這種方式需要給出容器的兩端,即開頭和結尾。
1.2、基于范圍的for循環
它的工作流程:
1、將 expression 中的元素拷貝到 declaration
2、重復執行
這種方式不需要給出容器的兩端,循環會自動以容器為范圍展開,并且循環中也屏蔽掉了迭代器的遍歷細節,直接抽取容器中的元素進行運算。
expression 可以是容器、數組、表達式、初始化列表等
1.3、兩者的區別
例子:
vector<int> arr{ 1,2,3,4,5,6 }; // 普通的 for 循環 for (auto it = arr.begin(); it != arr.end(); ++it) cout << *it << endl; // 基于范圍的 for 循環 for (auto val : arr) cout << val << endl;
1、基于范圍的 for 循環書寫更為簡單
2、上述例子中,基于范圍的for循環的容器 arr 只訪問了一次,即 :
后邊的表達式只執行一次;而普通for循環每次都要比較迭代器是否到了容器的邊界
2、基于范圍的for循環使用
2.1、值拷貝
// 只是將容器中的元素拷貝到 val,修改val不會影響容器中的值 for (auto val : arr) cout << val << endl;
2.2、引用
// 使用引用,修改val會影響容器中的值,即可以直接修改容器的值,且避免了拷貝的開銷 for (auto& val : arr) cout << val << endl;
2.3、只讀引用
// 使用const 修飾引用,使得只能只讀,不能修改容器的數據 for (const auto& val : arr) cout << val << endl;
2.4、關聯容器
遍歷關聯容器(set、map、multiset、multimap)時,即使使用引用,也不能修改容器中的值。對于關聯容器來說,內部元素都是只讀的,這是由容器的特性決定的,因此在 for 循環中 auto & 會被視為 const auto &
// 使用const 修飾引用,使得只能只讀,不能修改容器的數據 set<int> st{ 1,2,3,4,5,6 }; for (auto &val : st) cout << val ++ << endl; // 不能修改常量
原文鏈接:https://blog.csdn.net/qq_34168988/article/details/124176424
相關推薦
- 2022-11-30 Python利用yarl實現輕松操作url_python
- 2021-12-13 在Centos7中配置NIS的詳細過程_Linux
- 2022-11-12 asp.net?web?api2設置默認啟動登錄頁面的方法_實用技巧
- 2023-02-07 C語言可變參數與內存管理超詳細講解_C 語言
- 2023-01-18 GoLang完整實現快速列表_Golang
- 2022-05-29 C++中的類的大小詳解_C 語言
- 2022-08-30 cvc-complex-type.2.4.a: 發現了以元素 ‘base-extension‘ 開頭
- 2022-09-15 Go語言中Goroutine的設置方式_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支