【现代C++】范围基于的for循环

news2024/9/20 4:47:44

在这里插入图片描述

现代C++中的范围基于的for循环(range-based for loop)是C++11引入的一项特性,旨在简化对容器或范围的迭代过程。这种循环语法不仅使代码更清晰易读,还减少了迭代时的错误。以下是范围基于的for循环的详细介绍:

1. 基本用法

范围基于的for循环可以遍历任何提供迭代器的容器。

#include <vector>
#include <iostream>

void basicExample() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (int num : vec) {
        std::cout << num << " ";
    }
    // 输出: 1 2 3 4 5
}

2. 使用引用遍历

为了避免在迭代时复制元素,可以使用引用。

#include <vector>
#include <iostream>

void referenceExample() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (int& num : vec) {
        num *= 2; // 修改元素
    }

    for (const int& num : vec) {
        std::cout << num << " "; // 读取元素
    }
    // 输出: 2 4 6 8 10
}

3. 遍历数组

范围基于的for循环也可以用于遍历数组。

#include <iostream>

void arrayExample() {
    int arr[] = {1, 2, 3, 4, 5};
    for (int num : arr) {
        std::cout << num << " ";
    }
    // 输出: 1 2 3 4 5
}

4. 遍历字符串

可以使用范围基于的for循环遍历字符串中的每个字符。

#include <iostream>
#include <string>

void stringExample() {
    std::string str = "hello";
    for (char ch : str) {
        std::cout << ch << " ";
    }
    // 输出: h e l l o
}

5. 遍历映射(Map)

遍历std::mapstd::unordered_map时,可以获取每个键值对。

#include <map>
#include <iostream>

void mapExample() {
    std::map<std::string, int> wordCount = {{"apple", 1}, {"banana", 2}, {"cherry", 3}};
    for (const auto& pair : wordCount) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    // 输出:
    // apple: 1
    // banana: 2
    // cherry: 3
}

6. 结合自动类型推导(auto)

使用auto关键字可以让编译器自动推断元素的类型,进一步简化代码。

#include <vector>
#include <iostream>

void autoExample() {
    std::vector<double> vec = {1.1, 2.2, 3.3, 4.4, 5.5};
    for (auto num : vec) {
        std::cout << num << " ";
    }
    // 输出: 1.1 2.2 3.3 4.4 5.5
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1535470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ElasticSearch使用(一)

文章目录 一、简介1. 数据类型2. 倒排索引3. Lucene4. ElasticSearch5. Solar VS ElasticSearch 二、ElasticSearch入门1. 简介2. 分词器3. 索引操作4. 文档操作5. ES文档批量操作 二、ElasticSearch的DSL1. 文档映射Mapping2. Index Template3. DSL 一、简介 1. 数据类型 结…

Shopee如何选品?Shopee爆品市场趋势预测

Shopee母公司Sea近日发布了其截至2023年12月31日的全年财务业绩报告。 在2023财年报告中&#xff0c;Shopee继续保持稳健增长态势&#xff0c;全年总交易额&#xff08;GMV&#xff09;达到创纪录的 785亿美元 &#xff0c;同比去年增长6.8%。 年度营收增至90亿美元 &…

C#非强签名dll搜索顺序

由于不是强签名dll&#xff0c;所以无效考虑全局程序集缓存 (GAC)。 预备工作 新建解决方案ClassLibrary1,新建类库ClassLibrary1,新建控制台程序ShowDllLoc。 利用VS添加引用。 一&#xff0c;利用app.config设置codebase&#xff0c;设置dll的加载路径为&#xff1a;code…

计算结构体的大小(结构体的内存对齐)

一&#xff1a;问题 问题所在&#xff1a;两个结构体应该都是6个字节大小&#xff0c;为什么一个12&#xff0c;一个6&#xff1f;&#xff1f;&#xff1f; 二&#xff1a;如何正确的计算结构体大小&#xff1f; 首先得掌握结构体的对齐规则&#xff1a; 第一&#xff1a; 第一…

mysql四种事务隔离级别,2024金三银四

TransactionDefinition.PROPAGATION_MANDATORY&#xff1a;如果当前存在事务&#xff0c;则加入该事务&#xff1b;如果当前没有事务&#xff0c;则抛出异常。 TransactionDefinition.PROPAGATION_NESTED&#xff1a;如果当前存在事务&#xff0c;则创建一个事务作为当前事务的…

Eureka的介绍和作用,以及搭建

一、Eureka的介绍和作用 Eureka是Netflix开源的一种服务发现和注册工具&#xff0c;它为分布式系统中的服务提供了可靠的服务发现和故障转移能力。Eureka是Netflix的微服务架构的关键组件之一&#xff0c;它能够实时地监测和管理服务实例的状态和可用性。 在Eureka架构中&…

哪些事是你当了领导才明白的?

哪些事是你当了领导才明白的&#xff1f; 毕业5年&#xff0c;17年开始带团队&#xff0c;确实很多事不做到管理这一层&#xff0c;就真的意识不到。 带着【执行者】和【管理者】这2个视角&#xff0c;再结合我毕业至今这5年的所有职场经历&#xff0c;聊聊“职场潜规则”。 …

2023最新版Node.js下载安装及环境配置教程(非常详细)从零基础入门到精通,看完这一篇就够了

一、进入官网地址下载安装包 https://nodejs.org/zh-cn/download/ 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位 Tips&#xff1a;如果想下载指定版本&#xff0c;点击【以往的版本】&#xff0c;即可选择自己想要的版本下载 二、安装程序 &…

分布式锁简单实现

分布式锁 Redis分布式锁最简单的实现 想要实现分布式锁&#xff0c;必须要求 Redis 有「互斥」的能力&#xff0c;我们可以使用 SETNX 命令&#xff0c;这个命令表示SET if Not Exists&#xff0c;即如果 key 不存在&#xff0c;才会设置它的值&#xff0c;否则什么也不做。 …

MQTTnet实现客户端连接

使用MQTTnet&#xff08;Version4.3.1.873&#xff09;库实现多客户端连接多服务端&#xff0c;同时实现断线重连&#xff1b; 如下图所示&#xff0c;开启3个客户端连接3个服务端&#xff0c;当其一个服务端出现异常(服务停止&#xff0c;网络异常无法连接)导致连接断开时&am…

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(四)—— 过拟合和欠拟合

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 通过增加容量或提前停止来提高性能。 在深度学习中&#…

oracle 19c单机版本补丁升级

文章目录 一、补丁包概述二、备份opatch三、替换高版本opatch四、打DB补丁1、关闭数据库2、关闭监听3、解压补丁4、冲突检测5、补丁空间检查6、执行补丁升级7、将更新内容加载到数据库8、最后查看数据库版本9、卸载补丁包 一、补丁包概述 补丁升级包 链接&#xff1a;https://…

Vue3的与2的简单区别

Vue2选项式api Vue3组合式API setup方法的使用&#xff0c;最后需要return setup语法糖省略了内部的export default{} 和return 内容 以及组件的注册 reactive生成响应式对象&#xff0c;只能适用于复杂对象&#xff0c;简单类型不可 ref生成响应式数据&#xff1a;复杂类型和简…

学习人工智能:Attention Is All You Need-1-介绍;Transformer模型架构

Transformer模型是目前最成功的chatGPT&#xff0c;Sora&#xff0c;文心一言&#xff0c;LLama&#xff0c;Grok的基础模型。 《Attention Is All You Need》是一篇由Google DeepMind团队在2017年发表的论文&#xff0c;该论文提出了一种新的神经网络模型&#xff0c;即Trans…

十七 超级数据查看器 讲解稿 条目内容

十七 超级数据查看器 讲解稿 条目内容 ​​点击此处 以新页面 打开B站 播放当前教学视频 点击访问app下载页面 百度手机助手 下载地址 大家好&#xff0c;今天我们讲解超级数据查看器条目内容设置 条目内容设置能够 设置条目的顺序 显示隐藏 标题 需要下载本系统的…

OpenLayers基础教程——使用WebGL加载海量数据(1)

1、前言 最近遇到一个问题&#xff1a;如何在OpenLayers中高效加载海量的场强点&#xff1f;由于项目中的一些要求&#xff0c;不能使用聚合的方法加载。一番搜索之后发现&#xff1a;OpenLayers中有一个WebGLPoints类&#xff0c;使用该类可以轻松应对几十万的数据量&#xf…

SAP Business Application Studio(BAS)中开发Fiori App的基础知识

1. SAP Fiori Tools SAP Fiori Tools是一套用于支持SAP Fiori应用开发的工具&#xff0c;包括应用模板、可视化编辑器、代码生成、应用预览和集成测试工具等。这些工具可以帮助开发者更快速、更简单地创建和维护SAP Fiori应用。SAP Fiori Tools 可与SAP的开发环境&#xff08;…

Qt 不同数据类型转换

一.不同类型数据转换示例&#xff1a; #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QJsonDocument> #include <QJsonObject> #include <QDebug>int main(int argc, char *argv[]) {QCoreApplication::setAttribute…

用OceanBase binlog service 轻松进行数据回滚

背景 在日常的数据库运维过程中&#xff0c;难免会遭遇数据误操作的情形&#xff0c;比如因疏忽而执行了非预期的delete或update操作&#xff0c;这时就需要进行数据回滚。如果在OceanBase中启用了回收站功能&#xff0c;并设置了合适的undo_retention&#xff0c;那么我们可以…

【Frida】10_用鼠标自动标记棋盘上的雷区(一键过关)

&#x1f6eb; 系列文章导航 【Frida】 00_简单介绍和使用 https://blog.csdn.net/kinghzking/article/details/123225580【Frida】 01_食用指南 https://blog.csdn.net/kinghzking/article/details/126849567【Frida】02_常见API示例及功能函数封装&#xff08;snippets&#…