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

C++11的for循环

        在C++03/98中,不同的容器和数组,遍历的方法不尽相同,写法不统一,也不够简洁,而C++11基于范围的for循环以统一,简洁的方式来遍历容器和数组,用起来更方便了。

for循环的新用法

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> arr = {1, 2, 3, 4, 5};

    for(auto it = arr.begin(); it != arr.end(); it++)
    {
        cout << *it << endl;
    }

    return 0;
}

上面借助auto关键字,省略了迭代器的声明。

        现在,在C++11中终于有了基于范围的for循环。

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> arr = {1, 2, 3, 4, 5};

    for(auto n : arr)
    {
        cout << n << endl;
    }

    return 0;
}

        在上面的基于范围的for循环中,n表示arr中的一个元素,auto则是让编译器自动推导出n的类型。在这里,n的类型将被自动推导为vector中的元素类型int。

        在n的定义之后,紧跟一个冒号(:),之后直接写上需要遍历的表达式,for循环将自动以表达式返回的容器为范围进行迭代。

对map的遍历方法

#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;

int main()
{
    map<string, int> mymap = {{"1", 1}, {"2", 2}, {"3", 3}, {"4", 4}};

    for(auto& it :mymap)
    {
        cout << it.first << "\t" << it.second << endl;
    }

    return 0;
}

        这里需要注意两点:

        1、for循环中it的类型是std::pair。因此,对于map这种关联性容器而言,需要使用it.first或者it.second来提取键值。

        2、aut自动推导出的类型是容器中的value_type,而不是迭代器。

使用细节

#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <set>
using namespace std;

int main()
{
    set<int> myset = {1, 2, 3, 4, 5};

    for(auto& it : myset)
    {
        cout << it++ << endl;
        ///arr.cpp:26:13: error: increment of read-only reference ‘it’
    }

    return 0;
}

        在该例子中使用了auto &定义了set<int>中元素的引用,希望能够在循环中对set的值进行修改,但是set的内部元素是只读的,因此,for循环中的auto &会被推导为const int &。

        同样的细节也会出现在map的遍历中。基于范围的for循环中的std::pair引用,是不能够修改first的。

#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <set>
using namespace std;

vector<int> myarr = {1, 2, 4, 5};

vector<int>& get_vecotr()
{
    printf("get vector....\n");
    return myarr;
}


int main()
{
    for(auto it : get_vecotr())
    {
        cout << it << endl;
    }

    return 0;
}

输出结果:

        从上面的结果中可以看到,不论基于范围的for循环迭代了多少次,get_vector()只在第一次迭代之前被调用。

        因此,对于基于范围的for循环而言,冒号后面的表达式只会被执行一次。

相关文章:

C++11的for循环

在C03/98中&#xff0c;不同的容器和数组&#xff0c;遍历的方法不尽相同&#xff0c;写法不统一&#xff0c;也不够简洁&#xff0c;而C11基于范围的for循环以统一&#xff0c;简洁的方式来遍历容器和数组&#xff0c;用起来更方便了。 for循环的新用法 #include <iostre…...

代码随想录算法训练营第六十天| 739. 每日温度、 496.下一个更大元素 I

代码随想录算法训练营第六十天| 739. 每日温度、 496.下一个更大元素 I 739. 每日温度496.下一个更大元素 I 今天的题都能看懂&#xff0c;做了一个小时 739. 每日温度 题目链接&#xff1a;739. 每日温度 文章链接 状态&#xff1a;看视频能看懂&#xff0c;还是要多练。 代码…...

2.4_3死锁的处理策略---避免死锁

...

13.3测试用例进阶

一.测试对象划分 1.界面测试(参考软件规格说明书和UI视觉稿) a.什么是界面 1)WEB站(浏览器) 2)app 3)小程序 4)公众号 b.测试内容 1)界面内容显示的一致性,完整性,准确性,友好性.比如界面内容对屏幕大小的自适应,换行,内容是否全部清晰展示. 2)验证整个界面布局和排版…...

[云原生1] Docker网络模式的详细介绍

1. Docker 网络 1.1 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c; Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c; 同时Docker网桥是每个容器的默认…...

uni——底部弹框显示,底部导航隐藏

案例 在uni-app中&#xff0c;如果你在tabbar页面显示一个底部弹框&#xff0c;底部导航默认是会依旧显示的。如果你想在弹框显示时隐藏底部导航&#xff0c;你可以使用uni.hideTabBar和uni.showTabBar方法来控制底部导航的显示和隐藏。 export default {methods: {openPopup(…...

HammerDB的安装和使用(超详细)

目录 ​编辑 一、HammerDB的介绍 二、HammerDB的安装 1、下载hammerdb安装包 2、权限配置以及安装 3、查看安装目录 三、安装前的配置 1、启动监听 2、启动数据库 3、创建表空间 1.修改临时表空间 2…...

java经典面试题总结

1.请简述Java的继承&#xff0c;重写和多态的概念和运用 继承是一种Java中重要的面向对象编程方式&#xff0c;它允许一个类从另一个类继承某些属性和方法&#xff0c;在这种关系下&#xff0c;子类可以重写父类的方法&#xff0c;从而实现不同的行为。 多态是继承实现的一种关…...

django中template中post请求接口csrf问题

$(function () {$.ajaxSetup({headers: { "X-CSRFToken": getCookie("csrftoken") }}); });// 为防止CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;发post请求时需要在cookie中创建随机码 function getCookie(name) {v…...

聊聊RocketMQMessageListener的实现机制

序 本文主要研究一下RocketMQMessageListener的实现机制 示例 Service RocketMQMessageListener(nameServer "${demo.rocketmq.myNameServer}", topic "${demo.rocketmq.topic.user}", consumerGroup "user_consumer") public class UserC…...

ConfigurationProperties注解详解

ConfigurationProperties和Value注解用于获取配置文件中的属性定义并绑定到Java Bean或属性中 一个简单的例子 ConfigurationProperties需要和Configuration配合使用&#xff0c;我们通常在一个POJO里面进行配置&#xff1a; Data Configuration ConfigurationProperties(pre…...

三、组件与数据交互

一、组件基础 1、单文件组件 第一步&#xff1a;引入组件 import ComponentTest from ./components/ComponentTest.vue 第二步&#xff1a;挂载组件 components: {ComponentTest } 第三步&#xff1a;显示组件 <ComponentTest></ComponentTest><!-- 父组件 --…...

#define 宏定义看这一篇文章就够了

前言&#xff1a;在c/c学习的过程中&#xff0c;宏定义&#xff08;#define&#xff09;是作为初学者学习到的为数不多的预处理指令&#xff0c;在学习的时候我们被告知他可以帮助我们更高效的写程序&#xff0c;可以增加程序的可读性&#xff0c;但宏定义&#xff08;#define&…...

LeetCode算法栈—验证图书取出顺序

验证图书取出顺序 目录 验证图书取出顺序 题解&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 验证图书取出顺序 现在图书馆有一堆图书需要放入书架&#xff0c;并且图书馆的书架是一种特殊的数据结构&#xff0c;只能按照 一定 的顺序 放入 和 拿取 书籍。 给定一个…...

PAM从入门到精通(十八)

接前一篇文章&#xff1a;PAM从入门到精通&#xff08;十七&#xff09; 本文参考&#xff1a; 《The Linux-PAM Application Developers Guide》 PAM 的应用开发和内部实现源码分析 先再来重温一下PAM系统架构&#xff1a; 更加形象的形式&#xff1a; 六、整体流程示例 2.…...

【区间 DP】热门区间 DP 运用题

题目描述 这是 LeetCode 上的 「312. 戳气球」 &#xff0c;难度为 「困难」。 Tag : 「区间 DP」、「动态规划」 有 n 个气球&#xff0c;编号为 0 到 n - 1&#xff0c;每个气球上都标有一个数字&#xff0c;这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i …...

正则表达式,日期选择器时间限制,报错原因

目录 一、正则表达式 1、表达式含义 2、书写表达式 二、时间限制 1、原始日期选择器改造 2、禁止选择未来时间 3、从...到...两个日期选择器的时间限制 三、Uncaught (in promise) Error报错 一、正则表达式 1、表达式含义 &#xff08;1&#xff09;/^([a-zA-Z0-9_.…...

YOLOv7 改进原创 HFAMPAN 结构,信息高阶特征对齐融合和注入,全局融合多级特征,将全局信息注入更高级别

💡本篇内容:YOLOv7 改进原创 HFAMPAN 结构,信息高阶特征对齐融合和注入,全局融合多级特征,将全局信息注入更高级别 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv7 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,YOLOv7 专属 论文理…...

django建站过程(1)

django建站过程&#xff08;1&#xff09; 使用pycharm创建过程运行项目创建数据库创建超级用户登录生成的后台&#xff1a;界面本地化 准备以django,bootstrap来做一个过程记录&#xff0c;文章主要阐述过程的细节。 使用pycharm创建过程 创建项目“schoolapps”&#xff0c;…...

使用 Typhoeus 和 Ruby 编写的爬虫程序

以下是一个使用 Typhoeus 和 Ruby 编写的爬虫程序&#xff0c;用于爬取 &#xff0c;同时使用了 jshk.com.cn/get_proxy 这段代码获取代理&#xff1a; #!/usr/bin/env rubyrequire typhoeus require jsondef get_proxyurl "https://www.duoip.cn/get_proxy"respon…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...