c++11相关特性
前言
- 发现好多情况下都会用到c++11的新特性啊。
- 所以稍稍总结一下,只会粗略的说,不会详细的讲……
- upd.csp-s可能不是c++11标准,请慎用。(博主考试CE后的善意提醒)
1.auto&decltype
- c++11新增关键字,类型推导。
- 迭代器在之前必须写得很长,比如:
set<int>s;
set<int>::iterator it=s.begin();
- 而c++11只需写成:
auto it=s.begin();
- 但auto只能对变量而不能对表达式进行类型推导,所以又引入了decltype关键字。
- decltype只会推导表达式的类型而不会算出数值。
auto a=233,b=666;
decltype (a+b) c;
2.constexpr
- 常量表达式的修饰符。
- 可修饰常量和函数。
- 注意赋给常量的值必须是系统能够识别的,而不能是自定义的变量。
#include<bits/stdc++.h>
constexpr long long qwq(long long x){
return x*x;
}
int main(){
constexpr int a=;
return ;
}
3.nullptr
- 空指针值,为了区分0和NULL。
- 因为NULL的本质是0,所以就算把NULL赋给int也不会报错,但nullptr就不行,因为它只代表空指针。
4.tuple
- 元组。
- 相当于高级的pair,成员可为任意个。
- 相关操作参考下面的代码。
#include<iostream>
#include<tuple>
using namespace std;
tuple<int,int,int>s=make_tuple(,,);//make_tuple:制造元组
int main(){
cout<<get<>(s)<<" "<<get<>(s)<<" "<<get<>(s)<<endl;//get:得到元组中的某位元素
int x,y,z;
tie(x,y,z)=s;//tie:拆元组
cout<<x<<" "<<y<<" "<<z<<endl;
tuple<int,long long>w=make_tuple(,4ll);
auto ws=tuple_cat(w,s);//tuple_cat:合并元组
cout<<get<>(ws)<<" "<<get<>(ws)<<" "<<get<>(ws)<<" "<<get<>(ws)<<" "<<get<>(ws)<<endl;
return ;
}
5.哈希容器
- c++11新增了一些基于Hash的容器:
- unorder_map,unorder_set,unorder_mulitmap,unorder_mulitset。
- 性能比set,map等更优。
6.容器&数组遍历
- 只能说非常方便,甚至可以遍历map……
#include<bits/stdc++.h>
using namespace std;
vector<int>s;
int a[];
int main(){
a[]=,a[]=,a[]=;
s.push_back(),s.push_back(1e9+),s.push_back();
for(auto &x:s)cout<<x<<" ";
puts("");
for(int &x:a)cout<<x<<" ";
puts("");
return ;
}
7.容器初始化
- 可以像数组一样对容器进行初始化,包括map(为什么又拿map开刀……)。
map<int,int>mp{{233,1},{521,2}};
8.Lambda
- 匿名函数。
- 可以在使用时再定义函数,而不用费力起函数名。
- 如sort:
#include<bits/stdc++.h>
using namespace std;
int a[];
int main(){
srand(time());
int n=;
for(register int i=;i<=n;++i)a[i]=rand();
sort(a+,a+n+,[](int skyh,int yxs){
return skyh>yxs;
});
for(register int i=;i<=n;++i)printf("%d ",a[i]);
return ;
}
- 用法很灵活,非常好的特性。然而我对它理解不是非常透彻
9.mt19937
- C++11引入,基于Mersenne twister算法实现的高质量随机数。
- 得到的随机数在int范围内。
- 据说比rand()函数快,不过实测时mt19937比rand还要慢一些……
- 还是rand更快。
#include<random>
#include<cstdio>
using namespace std;
int main(){
//freopen("1.in","w",stdout);
mt19937 rd(time(NULL));
int n=rd()%+,m=rd()%+;
printf("%d %d\n",n,m);
return ;
}
- upd.听从miemeng神的意见,顺便提一下random标准库吧。
- 这是c++11新增的一个库,分为生成器和分布两大部分。
- 其中有三种随机数生成引擎。
- 第一种是线性同余生成引擎,第二种是Mersenne_twister算法(梅森旋转法)生成引擎,第三种是滞后Fibonacci算法生成引擎。
- 线性同余最快,梅森旋转法效果最好。
- 想更详细了解的话可以参照这篇博客:
- https://blog.csdn.net/u010487568/article/details/51526337。
10.尖括号
- 可能你在打代码的时候没有注意,但这也是c++11的特性。
- >>不再只被认为是流。
vector<pair<int,int>>s;//是合法的
c++11相关特性的更多相关文章
- C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)
因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...
- [转载] C++11新特性
C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...
- C#中的自定义控件中的属性、事件及一些相关特性的总结(转)
摘要: C#中的自定义控件中的属性(Property).事件(Event)及一些相关特性(Attribute)的总结 今天学习了下C#用户控件开发添加自定义属性的事件,主要参考了MSDN,总结并实 ...
- 不能支持C++11的特性~,升级到4.8.2
一.简易安装 操作环境 CentOS6.5 64bit,原版本4.4.7,不能支持C++11的特性~,希望升级到4.8.2 不能通过yum的方法升级,需要自己手动下载安装包并编译 1.1 获取安装包并 ...
- c++学习书籍推荐《深入理解C++11 C++11新特性解析与应用》下载
百度云及其他网盘下载地址:点我 编辑推荐 <深入理解C++11:C++11新特性解析与应用>编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑.系统.深 ...
- C++11 新特性之智能指针(shared_ptr, unique_ptr, weak_ptr)
这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr). shared_ptr shared_ptr 基本用法 shared_ ...
- Java SE 11 新增特性
Java SE 11 新增特性 作者:Grey 原文地址:Java SE 11 新增特性 源码 源仓库: Github:java_new_features 镜像仓库: GitCode:java_new ...
- C++11新特性总结 (二)
1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...
- C++11新特性总结 (一)
1. 概述 最近在看C++ Primer5 刚好看到一半,总结一下C++11里面确实加了很多新东西,如果没有任何了解,别说自己写了,看别人写的代码估计都会有些吃力.C++ Primer5是学习C++1 ...
随机推荐
- GTS原理、架构
全局事务服务(Global Transaction Service,简称 GTS)是阿里新推出的分布式事务处理方案. 1. GTS 的目标 GTS是一个面向互联网交易场景的分布式事务解决方案. 制约分 ...
- CentOS添加使用
在本机安装虚拟机,虚拟机安装CentSO.也可以装双系统,双系统问题更多 环境:win7 64 位 1.查看电脑是否可虚拟化(在百度查) 2.查看电脑是否打开虚拟机设置,如果没有,百度如何开启 打开虚 ...
- [题解][洛谷]_U75702/P5462_X龙珠_论何为字典序
赛时嫌麻烦,没写 赛后自闭了,写了一下午 题目描述 “X龙珠”是一款益智小游戏.游戏中有 n(2|n)n(2∣n) 个编号互不相同龙珠按照给定的顺序排成一个队列,每个龙珠上面都有一个编号.每次操作时, ...
- 如何快速的查找服务所在的进程id?
执行 pgrep -l 服务名称 这里以查找redis所在的进程id为例 执行 pgrep -l redis 从图中可知进程id 为30058
- asp.net运行原理及机制
当一个HTTP请求到服务器并被IIS接收到之后,IIS首先通过客户端请求的页面类型为其加载相应的.dll文件,然后在处理过程中将这条请求发送给能够处理这个请求的模块.在ASP.NET 3.5中,这个模 ...
- Linux中如何添加/删除FTP用户并设置权限
在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被设置用户名为test.被限制路径为/home/test 2.创建建用户:在root用户下: user ...
- luogu P5328 [ZJOI2019]浙江省选
传送门 每个人都可以看成一条直线\(y=ax+b\),所以我们要求的是每条线在整点处,上方线的数量的最小值(注意多条直线如果交于同一整点互不影响) 如果\(m=1\),其实只要求出半平面交,然后在半平 ...
- mysql复制表结构,复制表数据
MYSQL 复制表 show create table table_name:查看表的建表语句.该语句包含了原数据表的结构,索引等. 使用 SHOW CREATE TABLE 命令获取创建数据表(CR ...
- puppet自动化安装服务
puppet自动化部署 主机环境: server(master)端:172.25.7.1(server1.example.com) client(agent)端:172.25.7.2 172.25.7 ...
- 设置centos的yum仓库源为阿里源
前提 使我们的主机能够连接到外网 cd /etc/yum.repos.d/ #切换到yum仓库目录下 rm -rf * #删除默认配置仓库 wget -O /etc/yum.repos.d/CentO ...