C++学习32:侯捷C++11,14新特性(标准库部分)
文章目录
- 1 Rvalue references and Move Semantics
- 1.1 知识内容
- 1.2 move实战
- 2 新的容器
- 2.1 array
- 2.2 hashtable
- 2.3 forward_list
- 3 其他重要东西
- 3.1 hash functions
- 3.2 万用的hash functions
- 3.3 tuple
1 Rvalue references and Move Semantics
1.1 知识内容
右值引用:为了避免非必要的拷贝操作。move类似“浅拷贝”,只是把指针指向另一个位置,可以理解为“偷”,因此不同于copy的“深拷贝”。
首先先了解一下左值和右值的定义:
关于右值引用,如何告诉编译器呢?答案是&&
。
浅拷贝是危险的,两根指针指向同一个位置。因此被move之后,就不要再使用move前的了,之前的指针要设为nullptr,这样保证只有一根指针。
例子如下:
为了避免遗失(传的时左值却被认定为右值,或相反),需要进行forward的学习:
1.2 move实战
对容器的性能测试:
对于vector
2 新的容器
这部分在前面STL中已经学习过。
2.1 array
2.2 hashtable
2.3 forward_list
3 其他重要东西
3.1 hash functions
给unordered容器所用的哈希表进行算法处理,将每个元素给予其标号的方法。
实现方式:
下面我们来看一下G4.9的源码:
3.2 万用的hash functions
形式1:
前面讲哈希表时说过Hash Function,在为整数时即标号为自己,为字符串类型时进行一个逐位运算。有没有一种可以直接万用的Hash Function呢?我们进行如下学习,见下图:
同样的东西,左边是成员函数,而右边是全局函数。
左上角的情况:可以运作,但碰撞很多,太过天真。
而右上角的情况:hash_val根据不同的参数类型,按顺序调用不同的重载的函数(黑色的圈1,圈2,圈3)。其中圈1调用了可变模板参数,逐个处理每一个(见:),一步步走到左下方。
综上,来看一下这个Hash Function的源码:
形式2:
3.3 tuple
将多个类型整合到一起:
不是28而是32的原因,暂无解释。。。
源码如下:
基础:可变参数模板,简单来说就是:分成一个和一堆,把n分为1和n-1,随后继续将n-1分为1和n-2,这样不断递归。代码中体现为...
。详见:
tuple最神秘的地方:有个private继承,继承一部分自己(Tail部分的自己),故可以递归继承,形成上图右边的继承顺序情况。终止条件:递归继承到空的tuple<>。
来看一下tuple的历史:
C++学习32:侯捷C++11,14新特性(标准库部分)相关推荐
- 侯捷C++课程笔记03: STL标准库与泛型编程
本笔记根据侯捷老师的课程整理而来:STL标准库与泛型编程 pdf版本笔记的下载地址: 笔记03_STL标准库与泛型编程,排版更美观一点(访问密码:3834) 侯捷C++课程笔记03: STL标准库与泛 ...
- c++11/14新特性学习
1.__func__ 预定义表示符 返回所在函数的名字 #include<string> #include<iostream> using namespace std; con ...
- VS2010-2015对C++11/14/17特性的支持
VS2010-2015对C++11/14/17特性的支持 C++11 功能列表 Visual C++ 实现了 C++11 核心语言规范 中的绝大多数功能.许多 C++14 库功能和某些为 C++17 ...
- C++11 的新特性
C++11 的新特性 1 变量和基本类型 1.1 long long 类型 扩展精度浮点数,10位有效数字 1.2 列表初始化 初始化的几种不同形式,其中用花括号来初始化变量称为列表初始化: 比如: ...
- Apache Flink Meetup 8.7 深圳站,企业实践 + 1.14 新特性预览
时隔 10 个月,Apache Flink Meetup 又来到了深圳这个与 Flink 契合度很高的城市.正如改革和创新是深圳的标签,Apache Flink 给技术开发者们带来的,也是摒弃旧的 & ...
- 探索PostgreSQL 14新特性--SEARCH和CYCLE
探索PostgreSQL 14新特性--SEARCH和CYCLE PG14的SEARCH和CYCLE新功能大大简化了递归查询的方式,本文给出一些基于旅行计划的示例. 创建数据库 本文示例基于任何PG1 ...
- 七、Java 14 新特性
七.Java 14 新特性 Java 14 已如期于 2020 年 3 月 17 日正式发布,此次更新是继半年前 Java 13 这大版本发布之后的又一次常规版本更新,即便在全球疫情如此严峻形势下,依 ...
- Java复习第11天---11.3---Java8新特性---Stream流特点和常用方法2
Java复习第11天---11.3---Java8新特性---Stream流特点和常用方法2 目录 文章目录 1.Stream流特点 2.filter:过滤 3.map:映射 ***后记*** : 内 ...
- 从Folly源码学C++ 11的新特性
两年前Facebook发布了他们的C++库,命名为Folly,这是一个在Facebook内部广泛和可重复使用的C++库组件大集合. 但很多成熟的C++开源库已经存在了,为什么又引进一个呢?除了这个库的 ...
最新文章
- 【转】一文掌握 Linux 性能分析之网络篇(续)
- html embed详解
- Vue-router 的使用 (vue3.x版本)
- 第五章--数据库中间层实现读写分离
- 一定备足货!卢伟冰再曝红米骁龙855旗舰:性价比之王
- Android Graphviz 安装
- DB2数据库常用命令及查询
- openssl生成CA证书
- 智能汽车路径规划学习-Dijkstra、蚁群算法
- 【Algorithm】一般约束优化问题——PHR算法及其Matlab实现
- C语言课设-单位车辆调度管理
- 小程序悬浮按钮可拖动自动靠边
- 【Python3之面向对象的程序设计】
- 忙碌中也要记得休息,这两款好玩的游戏推荐给你
- 压缩感知学习(一):压缩感知的起源
- 【重写】简析stm32启动过程
- MySQL批量入库的几种方式详解
- 如何写好活动方案?学会5W2H框架分析法。
- 夜幕里的“非凡一步”,数字传播时代创意之路
- DSOD: Learning Deeply Supervised Object Detectors from Scratch