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

[C++]:for循环for(int num : nums)

前言

时不可以苟遇,道不可以虚行。


一、基于范围的for循环的基本语法

  • 在c++11里,为for循环,添加一个container,它就会自动迭代:实现了对于vector型变量vec的内容打印,变量i遍历vector中的每一个元素,直到vector的结束。
vector<int> vec;		//定义一个vector型变量vec的内容打印
vec.push_back(10);		//  向容器vec中添加10个元素
vec.push_back(20);		//再向容器vec中添加20个元素

for(int i:vec)
	cout << i << endl;

  • push_back():在 vector 容器尾部添加一个元素;
  • emplace_back():其功能和 push_back() 相同,都是在 vector 容器的尾部添加一个元素。

  • emplace_back()和push_back()的区别:

    在于 底层实现的机制不同push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。

  • 叠加更加复杂的数据结构,可以使用 auto 关键字,例如:迭代一个 map 类型数据变量:

map<string, string> address_book;
for(auto address_entry : address_book)
{
	cout << address_entry.first << " < " address_entry.second << " > " << endl;
}

二、修改 vector 内容

修改正在遍历的容器里的值,或者避免拷贝大量的对象,基本的迭代器就支持,可以将循环变量作为引用调用。将一个 intvector 对象中每一个元素进行自加:

vector<int> vec;
vec.push_back(1);
vec.push_back(2);	
for(int& i : vec)
	//增加vector对象中元素的值
	i++;
for(int i : vec)
	//显示更新的数值
	cout << i << endl;

三、基于范围

可以将基于范围的 for 循环迭代应用到自己定义的数据结构上,但需要满足一些条件:

  • 必须与 STL 迭代具有相似的工作属性;
  • 1、具有 begin 和 end 方法;
  • 2、支持操作符:*、!、=、++;

for(int &x : a)
x *= 2;

相关文章:

  • 3年测试经验,去面试连25K都拿不到了吗?现在测试这么坑?
  • 网课查题公众号 免费授权搜题接口
  • 一篇文章搞懂java中类以及static关键字执行顺序
  • 新手设计师一定要逛这几个网站
  • 多目标优化算法|基于拥挤距离的有效多目标人工蜂鸟算法,用于解决工程设计问题(Matlab代码实现)
  • yara分析
  • 早上一上班发现产品出现重大事故,作为产品经理该怎么办?
  • PaddleHub开源模型400+,三行代码也可实现无限AI创意梦想!
  • [Linux] CE知识随笔含Ansible、防火墙、VIM、其他服务
  • java架构知识点-中间件
  • 基于SSM的视频管理系统【完整项目源码】
  • 做到年收入一百万需要怎样做?
  • 人工神经网络连接方式,全连接神经网络作用
  • RabbitMq消息队列
  • 神经网络计算机的用途是,神经网络计算机的应用
  • [数据结构]链表的实现在PHP中
  • Apache的80端口被占用以及访问时报错403
  • Effective Java 笔记(一)
  • golang 发送GET和POST示例
  • Javascript Math对象和Date对象常用方法详解
  • MaxCompute访问TableStore(OTS) 数据
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • RxJS: 简单入门
  • spring security oauth2 password授权模式
  • text-decoration与color属性
  • 实现菜单下拉伸展折叠效果demo
  • 使用common-codec进行md5加密
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ionic入门之数据绑定显示-1
  • #pragma once与条件编译
  • #每日一题合集#牛客JZ23-JZ33
  • (6)STL算法之转换
  • (Java数据结构)ArrayList
  • (LeetCode C++)盛最多水的容器
  • (阿里云万网)-域名注册购买实名流程
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (十八)SpringBoot之发送QQ邮件
  • (转)JAVA中的堆栈
  • (转)负载均衡,回话保持,cookie
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转载)深入super,看Python如何解决钻石继承难题
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .gitignore文件---让git自动忽略指定文件
  • .net mvc 获取url中controller和action
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET多线程执行函数
  • .net连接MySQL的方法
  • @property @synthesize @dynamic 及相关属性作用探究
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @SuppressWarnings(unchecked)代码的作用