文章目录

  • 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新特性(标准库部分)相关推荐

  1. 侯捷C++课程笔记03: STL标准库与泛型编程

    本笔记根据侯捷老师的课程整理而来:STL标准库与泛型编程 pdf版本笔记的下载地址: 笔记03_STL标准库与泛型编程,排版更美观一点(访问密码:3834) 侯捷C++课程笔记03: STL标准库与泛 ...

  2. c++11/14新特性学习

    1.__func__ 预定义表示符 返回所在函数的名字 #include<string> #include<iostream> using namespace std; con ...

  3. VS2010-2015对C++11/14/17特性的支持

    VS2010-2015对C++11/14/17特性的支持 C++11 功能列表 Visual C++ 实现了 C++11 核心语言规范 中的绝大多数功能.许多 C++14 库功能和某些为 C++17 ...

  4. C++11 的新特性

    C++11 的新特性 1 变量和基本类型 1.1 long long 类型 扩展精度浮点数,10位有效数字 1.2 列表初始化 初始化的几种不同形式,其中用花括号来初始化变量称为列表初始化: 比如: ...

  5. Apache Flink Meetup 8.7 深圳站,企业实践 + 1.14 新特性预览

    时隔 10 个月,Apache Flink Meetup 又来到了深圳这个与 Flink 契合度很高的城市.正如改革和创新是深圳的标签,Apache Flink 给技术开发者们带来的,也是摒弃旧的 & ...

  6. 探索PostgreSQL 14新特性--SEARCH和CYCLE

    探索PostgreSQL 14新特性--SEARCH和CYCLE PG14的SEARCH和CYCLE新功能大大简化了递归查询的方式,本文给出一些基于旅行计划的示例. 创建数据库 本文示例基于任何PG1 ...

  7. 七、Java 14 新特性

    七.Java 14 新特性 Java 14 已如期于 2020 年 3 月 17 日正式发布,此次更新是继半年前 Java 13 这大版本发布之后的又一次常规版本更新,即便在全球疫情如此严峻形势下,依 ...

  8. Java复习第11天---11.3---Java8新特性---Stream流特点和常用方法2

    Java复习第11天---11.3---Java8新特性---Stream流特点和常用方法2 目录 文章目录 1.Stream流特点 2.filter:过滤 3.map:映射 ***后记*** : 内 ...

  9. 从Folly源码学C++ 11的新特性

    两年前Facebook发布了他们的C++库,命名为Folly,这是一个在Facebook内部广泛和可重复使用的C++库组件大集合. 但很多成熟的C++开源库已经存在了,为什么又引进一个呢?除了这个库的 ...

最新文章

  1. 【转】一文掌握 Linux 性能分析之网络篇(续)
  2. html embed详解
  3. Vue-router 的使用 (vue3.x版本)
  4. 第五章--数据库中间层实现读写分离
  5. 一定备足货!卢伟冰再曝红米骁龙855旗舰:性价比之王
  6. Android Graphviz 安装
  7. DB2数据库常用命令及查询
  8. openssl生成CA证书
  9. 智能汽车路径规划学习-Dijkstra、蚁群算法
  10. 【Algorithm】一般约束优化问题——PHR算法及其Matlab实现
  11. C语言课设-单位车辆调度管理
  12. 小程序悬浮按钮可拖动自动靠边
  13. 【Python3之面向对象的程序设计】
  14. 忙碌中也要记得休息,这两款好玩的游戏推荐给你
  15. 压缩感知学习(一):压缩感知的起源
  16. 【重写】简析stm32启动过程
  17. MySQL批量入库的几种方式详解
  18. 如何写好活动方案?学会5W2H框架分析法。
  19. 夜幕里的“非凡一步”,数字传播时代创意之路
  20. DSOD: Learning Deeply Supervised Object Detectors from Scratch

热门文章

  1. python 从字符串内取两个符号之间的内容 两个相同符号之间的内容
  2. Android投屏到设备及图像设备投屏到手机方案
  3. mulesoft 核心知识点 summary
  4. Mongo 命令总结
  5. 自创深度学习算法,预测股票上涨
  6. Flash和SD控制器(翻译)
  7. pytorch笔记(三)归一化 FRN、MABN
  8. 详细讲解Linux内核epoll内核原理与实现
  9. 南昌市工商联党组书记熊冬燕莅临红谷滩区·高通中国·影创联合创新中心调研
  10. Charles Reade