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

C++20中的基于范围的for循环(range-based for loop)

      C++11中引入了对基于范围的for循环(range-based for loop)的支持:该循环对一系列值(例如容器中的所有元素)进行操作。代码段如下:

const std::vector<int> vec{ 1,2,3,4,5 };
for (const auto& i : vec)std::cout << i << ", ";
std::cout << std::endl;

      C++17中增加对结构化绑定(structured bingding)声明的支持。代码段如下:

std::map<int, int> m{ {1,-1}, {2,-2}, {3,-3} };
for (const auto& [key, value] : m)std::cout << key << "," << value << "; ";
std::cout << std::endl;

      C++20中增加支持声明任意多个变量,必须以分号结尾。代码段如下:

const std::vector<int> vec{ 1,2,3,4,5 };
for (auto n = vec.size(), m = static_cast<size_t>(0); const auto & i : vec)std::cout << --n + i << "," << ++m << "; ";
std::cout << std::endl;for (const auto vec = std::vector{ -1,-2,-3,-4,-5 }; const auto& i : vec)std::cout << i << ", ";
std::cout << std::endl;

      以下为完整测试代码:

int test_for_20()
{const std::vector<int> vec{ 1,2,3,4,5 };// C++11for (const auto& i : vec)std::cout << i << ", ";std::cout << std::endl;// C++17std::map<int, int> m{ {1,-1}, {2,-2}, {3,-3} };for (const auto& [key, value] : m)std::cout << key << "," << value << "; ";std::cout << std::endl;// C++20for (auto n = vec.size(), m = static_cast<size_t>(0); const auto & i : vec)std::cout << --n + i << "," << ++m << "; ";std::cout << std::endl;for (const auto vec = std::vector{ -1,-2,-3,-4,-5 }; const auto& i : vec)std::cout << i << ", ";std::cout << std::endl;return 0;
}

      执行结果如下图所示:

      GitHub:https://github.com/fengbingchun/Messy_Test

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • leetcode165.解密数字
  • 矩阵分析与应用1-矩阵代数基础
  • 热词分析与维度人物构建
  • HarmonyOS Next应用开发之系统概述
  • Flink 提交作业的方式
  • dataX入门
  • 科研绘图系列:R语言双侧条形图(bar Plot)
  • STM32的独立看门狗详解
  • 玄机——第五章 linux实战-CMS01 wp
  • GEE代码实例教程详解:降水量分类分析
  • Memcached 介绍与详解及在Java Spring Boot项目中的使用与集成
  • 开发个人Ollama-Chat--5 模型管理 (二)
  • Java数据结构-链表与LinkedList
  • 触摸屏虚拟键盘组件 jQuery Virtual Keyboard使用 自定义键盘
  • 阿里巴巴矢量图标库使用
  • @angular/forms 源码解析之双向绑定
  • [LeetCode] Wiggle Sort
  • 77. Combinations
  • chrome扩展demo1-小时钟
  • CSS3 变换
  • Java深入 - 深入理解Java集合
  • JS专题之继承
  • Laravel 实践之路: 数据库迁移与数据填充
  • Mysql数据库的条件查询语句
  • mysql外键的使用
  • spring boot 整合mybatis 无法输出sql的问题
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • SpriteKit 技巧之添加背景图片
  • sublime配置文件
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 成为一名优秀的Developer的书单
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 从伪并行的 Python 多线程说起
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 那些被忽略的 JavaScript 数组方法细节
  • 排序(1):冒泡排序
  • 如何选择开源的机器学习框架?
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 小程序测试方案初探
  • 新版博客前端前瞻
  • 学习笔记TF060:图像语音结合,看图说话
  • python最赚钱的4个方向,你最心动的是哪个?
  • #define与typedef区别
  • $.proxy和$.extend
  • (10)STL算法之搜索(二) 二分查找
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (arch)linux 转换文件编码格式
  • (JS基础)String 类型
  • (LeetCode C++)盛最多水的容器
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (六)激光线扫描-三维重建
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking