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

[C++11]花括号{}、initializer_list、auto、decltype

文章目录

  • 1.花括号{ }的扩展
  • 2.initializer_list
  • 3.auto
  • 4.decltype
  • 5.容器的增加
    • 5.1array[useless]
    • 5.2forward_list[useless]
    • 5.3unordered_map/unordered_set
    • 5.4统一增加
  • 6.知乎文章

在这里插入图片描述

1.花括号{ }的扩展

int main()
{//C++98花括号{ }支持 1.数组 2.结构体struct Point{int _x;int _y;};int arr1[] = { 1, 2, 3, 4, 5 };int arr2[5] = { 0 };Point p = { 1, 2 }; //C++11:1.内置类型 2.自定义类型struct Point2{int _x;int _y;};// = 号可以省略int x1 = { 1 };int x2{ 2 };int array1[]{ 1, 2, 3, 4, 5 };int array2[5]{ 0 };Point2 p2{ 1, 2 };//拓展int x(1); //int的构造函数//申请4个int 初始化成0int* pa = new int[4]{ 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;};Date d1(2023, 10, 12); Date d2{ 2023, 10,12 };Date d3 = { 2023, 10, 12 }; return 0;
}

2.initializer_list

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//vector/list中的花括号{ }//1.查看a,b的类型
auto a = { 10,20,30,40,50,60 };
auto b = { 10,20,30 };
cout << typeid(a).name() << endl;//class std::initializer_list<int>
cout << typeid(b).name() << endl;//class std::initializer_list<int>//2.initializer_list的迭代器
initializer_list<int>::iterator it1 = a.begin();
initializer_list<int>::iterator it2 = b.begin();
cout << it1 << endl;
cout << it2 << endl;
// *it1 = 1;不可修改//3.initializer_list的对象
initializer_list<int> c = { 10,20,30 };
initializer_list<int>::iterator it3 = c.begin();
cout << it3 << endl;//vector/list中的{ }
//vector(
//      initializer_list<value_type> il,
//      const allocator_type& alloc = allocator_type()
//      );
vector<int> v1 = { 1,2,3,4,5 };
vector<int> v2 = { 10,20,30 };
vector<int> v3 = { 10,20,30,40,50,60 };
list<int> lt1 = { 1,2,3,4,5 };
list<int> lt2 = { 10,20,30 };//vecotr中数据为自定义数据类型
Date D1(2023, 5, 20);
Date D2(2023, 5, 21);
vector<Date> vd1 = { d1, d2 }; 
vector<Date> vd2 = { Date(2023,5,20), Date(2023,5,21) }; //匿名对象
vector<Date> vd3 = { {2023,5,20}, {2023,5,20} };         //先调用Date构造函数map<string, string> dict = { {"sort", "排序"},{"string", "字符串"},{"Date", "日期"} };
pair<string, string> pair1 = { "Date", "日期" };
pair<string, string> pair2{ "Date", "日期" }; 
return 0;
}

3.auto

C++98中auto是一个存储类型的说明符,表明变量是局部自动存储类型,但是局部域中定义局部的变量默认就是自动存储类型,所以auto就没什么价值了。
C++11中废弃auto原来的用法,将其用于实现自动类型推断

4.decltype

template<class T1, class T2>
void Func(T1 a, T2 b)
{decltype(a * b) x;cout << typeid(x).name() << endl;
}
int main()
{
//关键字decltype
//将变量的类型 声明为 表达式指定的类型
const int X = 1;
double y = 2.2;
cout << typeid(x * y).name() << endl;decltype(x* y) j ;
decltype(&x) k ;
cout << typeid(j).name() << endl;
cout << typeid(k).name() << endl;
//使用场景
//1.传类型
vector<decltype(x* y)> v;
//2.函数内部
Func(1, 'a');
return 0;
}

5.容器的增加

5.1array[useless]

在这里插入图片描述

数组是固定大小的序列容器:它们包含按严格线性序列排序的特定数量的元素。在内部,数组除了包含的元素之外,不保留任何数据(甚至不保留其大小,这是一个模板参数,在编译时固定)。就存储大小而言,它与使用该语言的括号语法([])声明的普通数组一样高效。这个类只添加了一层成员和全局函数,这样数组就可以用作标准容器。与其他标准容器不同,数组具有固定大小,并且不通过分配器管理其元素的分配:它们是封装固定大小元素数组的聚合类型。因此,它们不能动态地展开或收缩(请参阅可以展开的类似容器的矢量)。零大小的数组是有效的,但不应取消对它们的引用(成员前、后和数据)。与标准库中的其他容器不同,交换两个数组容器是一种线性操作,涉及单独交换范围中的所有元素,这通常是一种效率低得多的操作。另一方面,这允许两个容器中元素的迭代器保持其原始容器关联。数组容器的另一个独特特性是,它们可以被视为元组对象:<array>标头重载get函数以访问数组的元素,就像它是元组一样,以及专门的tuple_size和tuple_element类型。

C++大佬太想把C++做的完美了 想把它搞得更泛型 替代了C语言的静态数组 另外 [ ]可以检查越界 但是vector可以实现她所实现的功能

5.2forward_list[useless]

在这里插入图片描述

比起list而言,每个节点可以节省一个指针的空间
头插头删是效率较高
但是现在一般都不缺内存 用list更好

在这里插入图片描述

5.3unordered_map/unordered_set

由[哈希/散列]模拟实现[unordered_map/unordered_set] (手撕迭代器)
在这里插入图片描述

5.4统一增加

1、为容器增加支持initializer_list的构造函数
2、增加cbegin和cend系列迭代器接口
在这里插入图片描述
在这里插入图片描述
3.移动构造/移动赋值
4.右值引用插入接口函数

6.知乎文章

C++23的目标

在这里插入图片描述
在这里插入图片描述

相关文章:

[C++11]花括号{}、initializer_list、auto、decltype

文章目录 1.花括号{ }的扩展2.initializer_list3.auto4.decltype5.容器的增加5.1array[useless]5.2forward_list[useless]5.3unordered_map/unordered_set5.4统一增加 6.知乎文章 1.花括号{ }的扩展 int main() {//C98花括号{ }支持 1.数组 2.结构体struct Point{int _x;int _…...

在Android平板上使用code-server公网远程Ubuntu服务器编程

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…...

宝塔上安装mysql版本比较和区别

在宝塔上安装MySQL时&#xff0c;几个主要版本之间的区别主要在于性能、功能和安全性。 MySQL Community Server&#xff08;社区版本&#xff09;&#xff1a;这是MySQL的开源免费版本&#xff0c;由社区支持&#xff0c;但不提供官方技术支持。这个版本对一般用户来说可能有…...

uniapp微信小程序自定义封装分段器。

uniapp微信小程序自定义封装分段器。 话不多说先上效果 这里我用的是cil框架 vue3 下面贴代码 组价代码&#xff1a; <template><view class"page"><viewv-for"(item, index) in navList":key"index"click"changeNav(ind…...

文心一言 VS 讯飞星火 VS chatgpt (111)-- 算法导论10.2 2题

二、用go语言&#xff0c;用一个单链表 L实现一个栈。要求操作 PUSH和 POP 的运行时间仍为 O(1)。 文心一言&#xff1a; 在 Go 语言中&#xff0c;我们可以用结构体来实现一个单链表&#xff0c;然后再用栈的相关操作。 以下是一个可能的实现方式&#xff1a; package mai…...

小程序中使用echarts的相关配置以及折线图案例(简单易懂)

第一步&#xff1a;引入echarts文件--此文件需要下载&#xff1a; 下载地址&#xff1a;点击此处进行下载echarts文件 点击Download ZIP下载压缩包&#xff0c;注意&#xff1a;e-canvas是我从完整的文件中剥离出来的有用的&#xff0c;不会影响项目。 第二步&#xff1a;把整…...

前端面试回答不好的问题总结

vue生命周期&#xff1a; beforeCreated、created、beforeMount、mount、beforeUptade、uptade、beforeDestroy、destroyed、 Activated、Deactivated 闭包&#xff1a; ECMAScript中&#xff0c;闭包指的是&#xff1a; 从理论角度&#xff1a;所有的函数。因为它们都在创…...

漏洞预警|CVE-2023-38545 Curl 和 libcurl 堆缓冲区溢出漏洞

项目介绍 libcurl是一个跨平台的网络协议库&#xff0c;支持http、https、ftp等多种协议。 项目地址 https://github.com/curl/curl/releases 影响版本 7.69.0-8.3.0 漏洞分析 漏洞成因在于使用SOCKS5代理过程中造成的溢出。当Curl程序使用 SOCKS5代理时&#xff0c;设置…...

【Java 进阶篇】HTML 语义化标签详解

HTML&#xff08;HyperText Markup Language&#xff09;是构建Web页面的标准语言。在HTML中&#xff0c;标签&#xff08;tag&#xff09;是用于定义页面结构和内容的关键元素。在构建网页时&#xff0c;了解如何正确使用HTML标签是非常重要的&#xff0c;因为它们不仅影响页面…...

【思维构造】Element Extermination—CF1375C

Element Extermination—CF1375C 参考文章 思路 若 a 1 < a n a_1<a_n a1​<an​&#xff0c; 初始时 a 2 , . . . , a n − 1 a_2, ..., a_{n-1} a2​,...,an−1​ 这 n − 2 n-2 n−2 个元素中大于 a 1 a_1 a1​ 中的元素都能通过 a 1 a_1 a1​ 而被删除&…...

CSP模拟53联测15 D. 子序列

CSP模拟53联测15 D. 子序列 文章目录 CSP模拟53联测15 D. 子序列题目大意思路code 题目大意 &#xff08;seq / 3s / 512 MiB&#xff09; 给定一个长为 n n n 的仅有小写英文字母构成字符串 S S 1 S 2 ⋯ S n SS_1S_2\cdots S_n SS1​S2​⋯Sn​。我们定义一个字符串是好…...

iceberg-flink 十一:在dlink代码中建表增加catalog地址。

一&#xff1a;catalog 是存储元数据的地方。 二&#xff1a;表中增加catalog地址’ 当我们映射iceberg表的时候&#xff0c;增加了地址&#xff0c;就会成功映射到表 CREATE CATALOG dk_empower WITH(typeiceberg,catalog-typehadoop,warehousehdfs://cluster/iceberg/war…...

多列等高实现

预期效果 多列等高,左右两列高度自适应且一样,分别设置不同背景色效果预览: 分别由6种方法实现 1、使用padding + margin + overflow 实现多列等高效果,具有良好的兼容性; 2、border实现多列等高,左边框宽度为200px,左列浮动,伪元素清除浮动; 3、父元素线性渐变背景色…...

2023 泰山杯 --- Crypto wp

文章目录 题目解题过程part1part2part3 解题代码 题目 from fastecdsa.curve import P521 as Curve from fastecdsa.point import Point from os import urandom from random import getrandbits import uuid from Crypto.PublicKey import DSA from Crypto.Util.number impor…...

蓝桥杯每日一题20233.10.10

题目描述 回文日期 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题&#xff0c;我们最先想到的是暴力解法&#xff0c;将每一种情况经行循环查找&#xff0c;在查找的过程中记录下答案&#xff0c;回文日期就是字符串判断回文&#xff0c;ABABBABA型回文日期可以将回文经行特判…...

366. 寻找⼆叉树的叶⼦节点

366. 寻找⼆叉树的叶⼦节点 这道题混用二叉树递归 「遍历」和「分解问题」 两种思维模式。 class FindLeaves:"""366. 寻找⼆叉树的叶⼦节点https://leetcode.cn/problems/find-leaves-of-binary-tree/"""def solution(self, root):self.res …...

python - excel 设置样式

文章目录 前言python - excel 设置样式1. 准备2. 示例2.1. 给单元格设置样式"等线"、大小为24磅、斜体、红色颜色和粗体2.2. 给第二行设置样式"宋体"、大小为16磅、斜体、红色颜色和粗体2.3. 给第三行数据设置垂直居中和水平居中2.4. 给第四行设置行高为30…...

Gemmini测试test文件chisel源码详解(一)

DMACommandTrackerTest.scala 源码如下&#xff1a; package gemminiimport scala.collection.mutable.ArrayBufferimport chisel3._ import chisel3.iotesters.{ChiselFlatSpec, PeekPokeTester}class DMACommandTrackerTester(c: DMAReadCommandTracker[UInt]) extends Pee…...

RabbitMQ中的手动应答和自动应答

当使用RabbitMQ来处理消息时&#xff0c;消息确认是一个重要的概念。RabbitMQ提供了两种不同的消息确认方式&#xff1a;自动应答&#xff08;Automatic Acknowledgment&#xff09;和手动应答&#xff08;Manual Acknowledgment&#xff09;。这两种方式适用于不同的应用场景&…...

【C语言】文件的操作与文件函数的使用(详细讲解)

前言&#xff1a;我们在学习C语言的时候会发现在编写一个程序的时候&#xff0c;数据是存在内存当中的&#xff0c;而当我们退出这个程序的时候会发现这个数据不复存在了&#xff0c;因此我们可以通过文件把数据记录下来&#xff0c;使用文件我们可以将数据直接存放在电脑的硬盘…...

JSW-8016GM4 加固交换机

■ 三层交换机&#xff0c;功能强大 ■ 支持16个10/100/1000M 以太网接口 ■ 支持4个10G光纤接口 ■ 支持IEEE802相关协议 ■ 2U高度&#xff0c;可在方舱上架安装 ■ 满足电磁兼容要求 ■ 整机加固设计&#xff0c;满足国军标相关要求主要参数产品类型&#xff1a;千兆以太网交…...

Comsol锂离子电池热管理模型

Comsol锂离子电池热管理模型 电化学热耦合模型&#xff1a; 风冷换热方形电池 绝热软包电池 石蜡相变换热圆柱电池模型 21700圆柱电池热失控模型&#xff08;附带说明文档&#xff09;一、引言随着电动汽车、储能系统等领域的快速发展&#xff0c;锂离子电池的应用越来越广泛。…...

STM32开发中的C语言核心技巧与实战

1. STM32开发中的C语言核心技巧解析从事嵌入式开发十多年来&#xff0c;我深刻体会到C语言在STM32单片机开发中的核心地位。与通用计算机编程不同&#xff0c;嵌入式C语言需要直接操作硬件寄存器&#xff0c;对代码的精确性和效率要求极高。下面我将分享几个在STM32开发中最实用…...

新手入门:在快马平台动手实现你的第一个ui-ux-pro-max设计页面

作为一个刚接触前端设计的新手&#xff0c;最近在InsCode(快马)平台尝试做了一个UI-UX-Pro-Max级别的登录注册页面&#xff0c;整个过程意外地顺利。这里记录下我的实践过程&#xff0c;希望能帮到同样想入门的朋友。 从零搭建页面框架 先用HTML搭建基础结构&#xff0c;包含表…...

DFRobot URM07超声波传感器UART通信与温度补偿详解

1. DFRobot URM07超声波测距传感器技术深度解析1.1 产品定位与工程价值DFRobot URM07&#xff08;SKU: SEN0153&#xff09;是一款面向嵌入式系统设计的工业级超声波距离传感器模块&#xff0c;其核心价值在于将高精度测距、环境温度补偿、超低功耗与UART标准化接口四者深度融合…...

Windows ISO制作与补丁集成自动化工具实战指南:从手动操作到批量部署的效率革命

Windows ISO制作与补丁集成自动化工具实战指南&#xff1a;从手动操作到批量部署的效率革命 【免费下载链接】Win_ISO_Patching_Scripts Win_ISO_Patching_Scripts 项目地址: https://gitcode.com/gh_mirrors/wi/Win_ISO_Patching_Scripts 在数字化时代&#xff0c;系统…...

利用快马平台十分钟快速构建开源项目网站原型:以openclaw101为例

作为一个经常参与开源项目的开发者&#xff0c;我深知快速验证想法的重要性。最近在尝试为开源项目openclaw101搭建网站时&#xff0c;发现InsCode(快马)平台能完美解决从零搭建的繁琐过程。下面分享如何用十分钟完成一个具备完整功能的项目网站原型。 明确需求与功能规划 首先…...

Qwen3-14B开源模型实战:跨境电商多平台产品文案批量生成

Qwen3-14B开源模型实战&#xff1a;跨境电商多平台产品文案批量生成 1. 跨境电商文案生成的痛点与解决方案 跨境电商运营面临的最大挑战之一&#xff0c;就是需要为同一款产品在不同平台&#xff08;亚马逊、eBay、速卖通等&#xff09;生成符合各自规范的优质文案。传统人工…...

数据仓库核心建模:星型模型与雪花模型全面对比与实战选择

数据仓库核心建模&#xff1a;星型模型与雪花模型全面对比与实战选择一、引言二、定义&#xff1a;什么是星型模型&#xff1f;什么是雪花模型&#xff1f;2.1 星型模型&#xff1a;定义2.2 雪花模型&#xff1a;定义三、结构流程图&#xff1a;直观对比两种模型3.1 星型模型流…...

从NTLM中继到域控接管:ADCS-ESC8漏洞实战解析

1. ADCS-ESC8漏洞概述 ADCS-ESC8是Active Directory证书服务(AD CS)中的一个高危漏洞&#xff0c;它允许攻击者通过NTLM中继攻击获取域控制器证书。这个漏洞的核心在于ADCS默认配置中的Web证书注册页面仅使用HTTP协议且支持NTLM认证&#xff0c;但未启用任何中继攻击防护措施。…...