c++ 11 14笔记(3)标准库

Rvalue reference 右值引用 Move Semantics

为了解决非必要的拷贝:当赋值的右边是一个右值的时候,左边可以去‘偷’右边的内容,而不需要去allocation(分配空间)

  • 左值:变量可以出现在赋值符号的左手边
  • 右值:不能放在左边的叫右值,例如临时对象,以下右边两个是标准库的写法,却推翻了自己的想法,不管他,临时对象就是右值1:
    在这里插入图片描述
    以前的右值出现在右边是不可以取地址的,但是c++现在希望可以这么做

两种insert 上面的是原始的版本,下面的是‘偷’的版本,原来的string的拷贝函数也需要重载一个,原版copy是深拷贝,重新分配内存,新版是直接指针指像原来的地址(到此为止就是浅拷贝),并且将之前的指针打断。因此,只要保证赋值的那个对象是个右值或者以后不会再用,都可以用‘偷’的方式赋值给别的变量。

在这里插入图片描述

Unperfect Forwarding 不完美转接

在forwad里面调用process,第四,五行,forward传入一个右值,但是调用的确是process的左值版本,

在这里插入图片描述

perfect Forwarding 完美转接

标准库的写法

在这里插入图片描述

写一个move aware class

拷贝构造以及拷贝赋值都需要写一个move版本(参数为 &&str)

dou
在这里插入图片描述
测试
在这里插入图片描述

对vector的影响最大,对其他容器的影响较小,容器如果是以节点存在的,影响就小
在这里插入图片描述

对list的影响
在这里插入图片描述

普通版本的copy
在这里插入图片描述
move版本的copy,整个容器当成右值

在这里插入图片描述

新增的容器

红框的是新的
在这里插入图片描述

array

在这里插入图片描述

hashtable

篮子是由vector实现的,当元素的个数等于篮子个数时,篮子进行扩充到了原来的两倍左右的素数,然后重新计算元素落的篮子

通常使用时,放的是我们自己设计的类对象,通过hashfunction计算出hashcode,来存放在hashtable中

在这里插入图片描述
hash是一个type hash()是一个临时对象 创建一个的临时对象,调用计算得出hashcode

c++ 2.0 以前hash那个是无法通过的
在这里插入图片描述

tuple

在这里插入图片描述
右下角对类型做操作,元编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值