【C++干货铺】C++11常用新特性 | 列表初始化 | STL中的变化

=========================================================================

个人主页点击直达:小白不是程序媛

C++系列专栏:C++干货铺

代码仓库:Gitee

=========================================================================

目录

C++11简介

列表初始化

std::initializer_list

std::initializer_list使用场景

decltype关键字

STL中的一些变化

新容器

array

forward_list

容器中的一些新方法


C++11简介

在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了
C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞
进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。
从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于
C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中
约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,
C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更
强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多,所以我们要作为一个
重点去学习。


列表初始化

在C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。例如:

struct Point
{int _x;int _y;
};
int main()
{int array1[] = { 1, 2, 3, 4, 5 };int array2[5] = { 0 };Point p = { 1, 2 };return 0;
}

C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表时,可添加等号(=),也可不添加

int main()
{int i = 0;int j = { 1 };int k{ -1 };cout << i << " " << j << " " << k;int arr1[] = { 1,2,3,4,5 };int arr2[5] = { 0 };int arr3[]{ 1,2,3,4,5 };//添加到new表达式中int* pa = new int[4] {1, 2, 3, 4};return 0;
}

创建对象时也可以使用列表初始化方式调用构造函数初始化

//自定义类型的列表初始化
class Date
{
public:Date(int year,int month,int day):_year(year),_month(month),_day(day){cout << "Date(int year,int month,int day)" << endl;}
private:int _year;int _month;int _day;
};
int main()
{Date d1{ 2024,1,18 };//初始化一个对象,拷贝构造Date d2 = { 2024,1,19 };return 0;
}

注:这里的列表初始化的是直接调用构造函数,而下面的赋值重载看起来和列表初始化差不多,其实两者天差地别;赋值重载是先使用右边的数据构造生成一个临时对象,在赋值重载,而初始化列表是直接调用构造函数。存在类型转化。

std::initializer_list

std::initializer_list文档介绍

功能:可以接受任意多个相同类型的参数

std::initializer_list使用场景

  • std::initializer_list一般是作为构造函数的参数,C++11对STL中的不少容器就增加
  • std::initializer_list作为参数的构造函数,这样初始化容器对象就更方便了。也可以作为operator=的参数,这样就可以用大括号赋值。
  • 总结:我们使用初始化列表初始化STL中的容器时,就会将列表生成initializer_list;然后initializer_list作为容器构造函数的参数进行初始化。

decltype关键字

关键字decltype将变量的类型声明为表达式指定的类型

和typeid().name()、auto有很大的区别,typeid().name()推演出变量的类型,decltype是将变量的类型转化为字符串可以打印出来。

int main()
{int i;double j;vector<decltype(i* j)> v1;decltype(i * j) z = 10;cout << typeid(z).name() << endl;cout << z << endl;return 0;
}

 


STL中的一些变化

新容器

下面中圈起来的就是C++11中添加的新容器,最后的unordered_map和unordered_set不同于使用红黑树的map和set是使用hash结构实现;有关hash的内容和知识会在后面的文章中给大家介绍。

array

  • array数组是固定大小的序列容器:它们包含特定数量的元素,这些元素以严格的线性顺序排序。
  • 说白了也是一个数组,只不过和普通的数组比较其越界检查比较严格。

forward_list

是一个单链表,和list的区别在于只支持单向迭代器;并且只支持头插和头删。

容器中的一些新方法

  • 如果我们再细细去看会发现基本每个容器中都增加了一些C++11的方法,但是其实很多都是用得比较少的。
  • 比如提供了cbegin和cend方法返回const迭代器等等,但是实际意义不大,因为begin和end也是可以返回const迭代器的。
  • 容器中一些还有一些关于移动构造移动和移动赋值的一些内容需要有右值引用的知识铺垫,我会在下一篇文章中完整的给大家介绍。

今天给大家分享介绍了C++中常用特性的一部分,由于篇幅问题会在下篇文章中介绍右值引用等其他问题;如果觉得文章还不错的话,可以三连支持一下,个人主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是我前进的动力! 

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

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

相关文章

chrony介绍和安装

chrony介绍和安装 1.chrony&#xff08;时间同步服务&#xff09; 1.1 chrony介绍 Chrony 是一个用于时间同步的软件&#xff0c;它旨在提供高精度的系统时钟同步。Chrony 软件包括一个 NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;服务器和客…

Python基础第二篇(Python基础语法)

文章目录 一、字面量二、注释三、变量四、数据类型五、数据类型转换六、标识符七、运算符八、字符串扩展内容&#xff08;1&#xff09;字符串定义&#xff08;2&#xff09;字符串拼接、&#xff08;3&#xff09;字符串格式化&#xff08;4&#xff09;字符串格式化的精度控制…

【算法与数据结构】Java实现查找与排序

文章目录 第一部分&#xff1a;查找算法二分查找插值查找分块查找哈希查找树表查找 第二部分&#xff1a;排序算法冒泡排序选择排序插入排序快速排序 总结 第一部分&#xff1a;查找算法 二分查找 也叫做折半查找&#xff0c;属于有序查找算法。 前提条件&#xff1a;数组数据…

TestNG注释

目录 TestNG注释列表 BeforeXXX和AfterXXX注释放在超类上时如何工作&#xff1f; 使用BeforeXXX和AfterXXX TestNG注释 TestNG是一个测试框架&#xff0c;旨在简化广泛的测试需求&#xff0c;从单元测试&#xff08;隔离测试一个类&#xff09;到集成测试&#xff08;测试由…

某马头条——day05

文章定时发布 实现方案对比 实现方案 延迟队列服务实现 按照文档进行项目的导入并准备数据库表导入对应实体类和nacos配置中心 乐观锁集成 redis集成和测试 成功集成通过测试 添加任务 ①&#xff1a;拷贝mybatis-plus生成的文件&#xff0c;mapper ②&#xff1a;创建task类…

ConcurrentHashMap 原理

ConcurrentHashMap ConcurrentHashMap的整体架构ConcurrentHashMap的基本功能ConcurrentHashMap在性能方面的优化 concurrentHashMap&#xff1a; ConcurrentHashMap的整体架构 concurrentHashMap是由数组链表红黑树组成 当我们初始化一个ConcurrentHashMap实例时&#xff0c…

基于74LS191+74LS160的8位二进制转BCD码应用电路设计

一、74LS191简介: 74LS191为可预置的四位二进制加/减法计数器,RCO进位/借位输出端,MAX/MIN进位/借位输出端,CTEN计数控制端,QA-QD计数输出端,U/D计数控制端,CLK时钟输入端,LOAD异步并行置入端(低电平有效)。 二、74LS191功能表: 三、74LS191逻辑框图: 四、74LS160…

2024美赛数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

2024年【裂解(裂化)工艺】考试题及裂解(裂化)工艺免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 裂解&#xff08;裂化&#xff09;工艺考试题参考答案及裂解&#xff08;裂化&#xff09;工艺考试试题解析是安全生产模拟考试一点通题库老师及裂解&#xff08;裂化&#xff09;工艺操作证已考过的学员汇总&#xf…

CentOS7 配置静态IP

目录 在解决了刚安装不能联网后配置静态IP1.查看配置好网卡后&#xff0c;DHCP动态分配的IP地址2. 查看网关3. 更改IP地址文件4. 重启网络服务5. 检查配置6. 更新路由&#xff08;如果需要&#xff09; 在解决了刚安装不能联网后 解决centos 7刚安装不能联网 配置静态IP 在 C…

阿里云容器服务助力万兴科技 AIGC 应用加速

作者&#xff1a;子白&#xff08;顾静&#xff09; 2023 年堪称是 AIGC 元年&#xff0c;文生图领域诞生了 Stable Diffusion 项目&#xff0c;文生文领域诞生了 GPT 家族。一时间风起云涌&#xff0c;国内外许多企业投身 AIGC 创新浪潮&#xff0c;各大云厂商紧随其后纷纷推…

MySQL---经典SQL练习题

MySQL---经典50道练习题 素材:练习题目&#xff1a;解题&#xff1a; 素材: 1.学生表 Student(SId,Sname,Sage,Ssex) SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CId,Cname,TId) CId 课程编号,Cname 课程名称,TId 教师编号 3.教师表 Teacher(T…

C++初阶类与对象(二):详解构造函数和析构函数

上次为类与对象开了一个头&#xff1a;C初阶类与对象&#xff08;一&#xff09;&#xff1a;学习类与对象、访问限定符、封装、this指针 今天就来更进一步 文章目录 1.类的6个默认成员函数2.构造函数2.1引入和概念2.2构造函数特性2.2.1特性1~42.2.2注意2.2.3特性5~72.2.4注意 …

Linux网络--- SSH服务

一、ssh服务简介 1、什么是ssh SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令&#xff0c;SSH 为建立在…

OpenCV实战:控制手势实现无触摸拖拽功能

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用OpenCV来控制手势&#xff0c;瞬间提升操作体验&#xff01;跨越界限&#xff0c;OpenCV手势控制拖拽功能现身。 一、主要步骤及库的功能介绍 1.主要步骤 要实现本次实验&#xff0c;主要步骤如下…

Ubuntu 22.04安装使用easyconnect

EasyConnect 百度百科&#xff0c;EasyConnect能够帮助您在办公室之外使用公司内网的所有系统及应用。在您的公司部署深信服远程应用发布解决方案后&#xff0c;您的公司所有业务系统及应用都可以轻松迁移至移动互联网上。您可以通过手机、PAD等智能移动终端随时随地开展您的业…

CodeReview 小工具

大家开发中有没有遇到一个版本开发的非常杂&#xff0c;开发很多个项目&#xff0c;改动几周后甚至已经忘了自己改了些什么&#xff0c;领导要对代码review的时候&#xff0c;理不清楚自己改过的代码&#xff0c;只能将主要改动的大功能过一遍。这样就很容易造成review遗漏&…

牛客月赛86+cf(edu)好题

思路&#xff1a;前缀和双指针 代码&#xff1a; #include <bits/stdc.h> using namespace std; using i64 int64_t; int main() {cin.tie(nullptr)->sync_with_stdio(false);cout << fixed << setprecision(20);int t 1;for (int ti 0; ti < t; …

展锐T618_虎贲T618紫光展锐安卓核心板规格参数

基于紫光展锐八核T618平台的纯国产化方案&#xff0c;采用了开放的智能Android操作系统&#xff0c;并集成了4G网络、2.5G5G双频WIFI(可支持1*1 MIMO)、BLUETOOTH近距离无线传输技术以及GNSS无线定位技术。用户可以根据特定场合的需求&#xff0c;选择合适的嵌入式ARM核心模块&…

Linux命令手册

简介 Multics&#xff08;大而全&#xff09;项目失败&#xff0c;吸取教训启动Unix&#xff08;小而精&#xff09;&#xff0c;Linus Benedict Torvalds受Unix启发开发初始版本Linux内核&#xff0c;Git也由其开发&#xff0c;目的是为了更好的管理Linux内核开发。Unix是商业…