C++11 基于范围的for循环

C++11语法糖:auto和范围for循环详解 本文简单介绍C++11中的语法糖:auto和范围for循环的使用 阅读详情

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

#include <iostream>
#include <vector>

std::vector<int> arr = { 1, 2, 3, 4, 5 };

std::vector<int>& get_range(void)
{
	std::cout << "get_range ->: " << std::endl;
	return arr;
}

int main(void)
{
	for (auto val : get_range())
	{
		std::cout << val << std::endl;
	}
	
	getchar();
	return 0;
}

运行结果:

get_range ->:
1
2
3
4
5

错误用法示范:

#include <iostream>
#include <vector>

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

	int i = 0;
	for (auto val : arr)
	{
		std::cout << val << std::endl;
		arr.push_back(0); //扩大容器
	}
	getchar();
	return 0;
}

输出结果:

1
-572662307
-572662307
-572662307
-572662307

同普通的for循环一样,在迭代时修改容器很可能会引起迭代器失效,导致一些意料之外的结果。
换成普通的for循环:

#include <iostream>
#include <vector>

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

	auto && __range = (arr);
	for (auto __begin = __range.begin(), __end = __range.end(); 
		__begin != __end; ++__begin)
	{
		auto val = *__begin;
		std::cout << val << std::endl;
		arr.push_back(0); //扩大容器
	}

	getchar();
	return 0;
}

基于范围的for循环倾向于在循环开始之前确定好迭代的范围,而不是在每次迭代之前都去调用一次arr.end();
良好的编程习惯是尽量不要再迭代器过程中修改迭代器的容器。但是实际情况要求我们不得不这样的时候,通过理解基于范围的for循环的这个特点,就可以方便地分析每次迭代的结果,提前避免算法的错误。

微信公众号数据采集实战:历史文章、互动数据与评论详情全解析 本文提供了一套完整的微信公众号数据采集实战方案,详细解析了如何通过接口调用获取公众号的历史文章列表、单篇文章的互动数据以及详细的用户评论。文章从环境准备、核心参数解析到分页逻辑、批量处理和异常处理,提供了可运行的Python代码示例,旨在帮助开发者高效、稳定地构建自动化采集工具,用于竞品分析、内容研究和舆情监控。 阅读详情

相关推荐

CAN总线错误帧全解析:从数据包到硬件层的故障树分析

本文深入解析CAN总线错误帧的故障树分析方法,从数据包到硬件层全面剖析错误机制。通过物理层信号测试、数据链路层错误解码和应用层协议排查,提供系统化的诊断框架。结合CANoe配置和示波器波形分析,帮助工程师快速定位总线故障,提升系统可靠性。

weixin_26742753的博客 487

【C++】for循环中带冒号(:)用法简介

基本用法 正常我们想要输出一个数组的全部元素时,需要采用以下的方法: //随机定义的数组 int array[10] = { 54, 23, 78, 9, 15, 18, 63, 33, 87, 66 }; for (int i = 0; i < 10; i++) { cout << array[i] << " "; //输出:54 23 78 9 15 18 63 33 87 66 } 在C++11中,我们可以在for循环添加冒号 : 来简化这一过程: //随机定义的

Quentin的博客 5843

Xiaojie雷达之路---使用CCS创建一个毫米波雷达的工程(AWR1843)

前些天,在工具箱中下载了一个基于毫米波雷达(AWR1843)自动停车的案例,并成果导入CCS中,可以完美运行,但是如何新建一个新的工程呢?这篇文章就会对其进行讲述。

XiaoJie的博客 4548

【C++基础编程】#029 for循环中带冒号(:)用法简介

基本用法 正常我们想要输出一个数组的全部元素时,需要采用以下的方法: //随机定义的数组 int array[10] = { 54, 23, 78, 9, 15, 18, 63, 33, 87, 66 }; for (int i = 0; i < 10; i++) { cout << array[i] << " "; //输出:54 23 78 9 15 18 63 33 87 66 } 在C++11中,我们可以在for循环填加冒号 : 来简化这一过程: //随机定义的

杨小浩浩的博客 1万+

飞常准小程序接口逆向分析:如何破解航班查询的签名机制

本文深度解析了飞常准小程序航班查询接口的安全机制,重点剖析了其基于MD5和参数排序的签名算法。通过逆向分析核心代码,详细阐述了签名生成流程,并提供了Python实现的签名生成器与调试技巧,为开发者理解与模拟此类接口调用提供了实战指南。

zz67890的博客 531

PDF批量加水印 与 去除水印实践

我们可以给PDF加图片水印或文字水印,要去除图片水印,一般只需要删除最后一个图片对象即可。要去除文字水印,需要保证主体内容和文字水印在/Contents中位于不同的对象内,这样我们只需要删除文字水印对应的对象即可删除水印。而对于主体内容和文字水印已经混合在一个对象时,本文的提供的方法则无能为力,需要进一步深入分析PDF细节。

小小明-代码实体的专栏 2755

C++ for循环中有冒号,for(auto &c:s)与for(auto c:s)的用法

C++ for循环中有冒号,for(auto &c:s)与for(auto c:s)的用法

weixin_64338873的博客 1946

大疆Livox Mid-70雷达的使用

一、前期准备 (一)、使用Livox Viewer测试雷达 1、设置静态IP sudo ifconfig enx081f7152092a 192.168.1.50 查看IP是否设置成功 lacyexsale@lacyexsale-KLV-WX9:~$ ifconfig enx081f7152092a Link encap:以太网 硬件地址 08:1f:71:52:09:2a inet 地址:192.168.1.50 广播:192.168.1.255 掩码:255.255.25

LacyExsale的博客 1万+

C++小知识点(for,nullptr)

今天学习一些C++的小知识点,便于加深对C++的理解,码字不易,希望多多支持1.太多的事,慢慢地就不能做了;太多的人,渐渐地就不见了。成长似乎是一个丢失的过程。青春,就是注定了要颠簸,要有眼泪和汗水,有委屈、不甘和失败。后来,慢慢知道一切该发生的就是会发生,一切会错过的就是会错过。2.趁自己还不老,走自己想走的路。没有理由,不去闯!时间,抓起了就是黄金,虚度了就是流水;理想,努力了才叫理想,放弃了那只是妄想!努力,虽然不一定会获得,但不努力,就一定一无所获。3.趁自己还不老,走自己想走的路。

云小逸的博客 902

FPGA 学习笔记:Vitis IDE launch failed 的解决方法

FPGA 学习笔记:Vitis IDE launch failed 的解决方法

坚韧与专注 1万+

01 Python学习总结:Python简介及入门

Python 是一门高级编程语言,以其简洁、易读和强大的功能而广受欢迎。它适用于多种应用场景,包括 Web 开发、数据分析、人工智能、自动化脚本等。以下是 Python 的简介及入门知识总结,帮助你快速了解并开始学习 Python。

数据知道的博客 1万+

【C++】基于范围的for循环 (C++11)

【C++】基于范围的for循环 (C++11)

一点一点变好 2760

YOLOv13改进策略【特征提取层】| CVPR-2024 PKI Module 获取多尺度纹理特征,适应尺度变化大的目标

PKI Module是。

Limiiiing的博客 275

C++11基于范围的for循环

C++11中的新特性—基于范围的for循环 C++ 11提供了一个特殊版本的 for 循环,在很多情况下,它都可以简化数组的处理,这就是基于范围的 for 循环。在使用基于范围的 for 循环处理数组时,该循环可以自动为数组中的每个元素迭代一次。 例如,如果对一个 10 元素的数组使用基于范围的 for 循环,则该循环将迭代 10 次。因为基于范围的 for 循环可以自动知道数组中元素的个数,所...

weixin_43831728的博客 1293

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

auto。

普罗米修斯的博客 2418

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

1. C++98/03 for循环与 C++ 11 for循环 1.1 两种for循环语法 在 C++03/98 中,不同的容器和数组,遍历的方法不尽相同,写法不统一,也不够简洁,而 C++11 基于范围的 for 循环以统一、简洁的方式来遍历容器和数组,用起来更方便了。 C++98/03 中普通的 for 循环,语法格式: for(表达式 1; 表达式 2; 表达式 3) { // 循环体 } C++11 基于范围的 for 循环,语法格式: for (declaration : express

M2嵌入式 752

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++ 11 范围for循环

简介: 在C++98中,如果要遍历一个数组采取 for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i) 但对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引入了基于范围的for循环,十分方便并且不需要担心数组越界等问题。 for循环后的括号由冒号“ :”分为两部分:...

Pin_na 1601

【C++小知识】基于范围的for循环(C++11)

介绍了范围for的基本使用,后续还会讲解

dab112的博客 1135

基于范围的for循环(C++11)

本篇博客会写C++11标准的中的一个新特性范围for,并解释它的使用方法。 基于范围的for循环 范围for介绍 那么什么是范围for呢?在使用早期C++标准的遍历一个数组,我们会使用这段代码: void TestFor() { int array[] = { 1, 2, 3, 4, 5 }; for (int i = 0; i < sizeof(array) / sizeo...

NanlinW的博客 1272

C++11范围for循环

C++ 范围 for 循环(Range-based for loop)是 C++11 引入的特性,它极大地简化了容器和数组的遍历操作。类似python的for循环

MzKyle的博客 1213

基于范围的for循环(C++11)

C++11新增了一种循环:基于范围的for循环。这简化了一种常见的循环任务:对数组(或容器类,如vector和array)的每个元素执行相同的操作,如下例所示:     double prices[5] = {4.99, 10.99, 6.87, 7.99, 8.49};     for (double x: prices)         cout 其中,x最初表示数组prices的第

程序人生 2067

【C++11】范围 for 循环与传统 for循环的对比

C++11的范围for循环与传统for循环在性能上通常相当,但在实现和适用场景上存在差异。范围for循环会被编译器优化为迭代器遍历,在连续存储容器中与传统下标访问效率相近,但在链表等非连续容器中明显更优。编译器对两种循环均会应用循环展开、SIMD向量化等优化技术。建议优先使用范围for循环以提高可读性,仅在需要索引控制时使用传统for循环,并配合-O3优化选项。实际性能差异通常小于5%,关键瓶颈在于函数调用、指针别名和容器修改操作。

学习代码 1019

《C++11》范围基 for 循环详解

C++11 的范围基 for 循环为遍历容器提供了一种简洁、安全且高效的方式。通过使用 const 引用和非 const 引用,我们可以灵活地处理容器中的元素。无论是简单的数组还是复杂的 STL 容器,范围基 for 循环都能帮助我们更好地管理和操作数据。

码事漫谈 1941

C++11之基于范围的for循环

在C++98中,不同的STL容器和C风格数组的遍历方式各不相同,写法也不统一,而且不够简洁。而C++11基于范围的for循环可以简洁并且统一的方式遍历STL容器和C风格数组。

Thinking777的博客 1507
上一篇: 利用std::shared_ptr的custom_deleter来减轻资源管理负担
下一篇: 给shared_ptr添加自定义删除器的几种方式
hp_cpp
博客等级 码龄11年 310粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值