您的位置:首页 > 编程语言 > C语言/C++

【C++】C++11特性:初始化、hash容器和随机数生成器

2016-10-02 14:45 429 查看

初始化

标准C语言要求在代码开头处声明所有的变量,C++则建议程序猿在需要使用变量的时候才声明和定义变量。这容易导致C++程序猿忘记初始化变量而发生bug,因此编程的一个准则就是尽快初始化刚声明的变量。C++中的类的成员变量,只有在构造函数中才能初始化,如果成员变量太多,程序猿就容易遗漏成员变量;C++STL中的容器,初始化不是太方便。

现在C++11加入了新的初始化功能:

声明类的成员变量的同时可以赋值,无须去构造函数赋值。

容器可像栈数组一样初始化。

容器初始化的用法就非常像Python了,比较惊奇的是关联容器也能初始化:

int arr[5]={1,2,3,4,5};
vector<int> vec = {1,2,3,4,5};
list<int> list = {6,7,8};
set<char> set = {'a','b','c'};
map<char,int> map = {{'a',1},{'b',2},{'c',3}};


C++11提供了nullptr来代替NULL或者0,用来表示空指针。一般来说,直接用0来表示空指针就可以了,但是0是一个整型数据,意味着它可以执行运算;NULL实际上是#define NULL 0定义来的;而使用nullptr,空指针就是空指针,专用的不会跟其他类型混淆,这能增加安全性。

hash容器

hash容器是基于散列表数据结构的一种容器,其优点是搜索速度非常快,应用非常广泛。hash容器的实现方式有很多,各有各的优点。C++11正式将hash容器纳入标准库(STL),C++委员会考虑到标准库中hash容器的实现并不是总是最优的,程序猿可能会用专用的第三方hash库来增加效率,因此将STL中的hash容器的前缀命名为unordered_。STL中的hash容器有unordered_map, unordered_multimap, unordered_set 和unordered_multiset,用法和map、multimap、set、multiset一样。

随机数生成器

对于吾等做数学计算的程序猿来说,随机数生成器比正则表达式更有吸引力。C++11提供了一个真随机数算法,平时使用伪随机数就够了。C++11随机数生成需要一个随机数生成器和一个随机分布类。

C++11的伪随机数生成器主要有:linear_congruential_engine线性同余法,mersenne_twister_engine梅森旋转法,substract_with_carry_engine滞后Fibonacci。这三种方法需要调参,但是我只想安安静静的拿到一个随机数!在此基础上C++11又提供了基于这三种方法的默认随机数生成器:minstd_rand,minstd_rand0,mt19937,mt19937_64,ranlux24_base,ranlux48_base,ranlux24,ranlux48,knuth_b。还是太复杂了。于是C++11最后还有一个default_random_engine伪随机数生成器,用它就够了。

C++11的随机分布类有:

均匀分布:

uniform_int_distribution 整数均匀分布

uniform_real_distribution 浮点数均匀分布

伯努利类型分布:(仅有yes/no两种结果,概率一个p,一个1-p)

bernoulli_distribution 伯努利分布

binomial_distribution 二项分布

geometry_distribution 几何分布

negative_biomial_distribution 负二项分布

Rate-based distributions:

poisson_distribution 泊松分布

exponential_distribution指数分布

gamma_distribution 伽马分布

weibull_distribution 威布尔分布

extreme_value_distribution 极值分布

正态分布相关:

normal_distribution 正态分布

chi_squared_distribution卡方分布

cauchy_distribution 柯西分布

fisher_f_distribution 费歇尔F分布

student_t_distribution t分布

分段分布相关:

discrete_distribution离散分布

piecewise_constant_distribution分段常数分布

piecewise_linear_distribution分段线性分布
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hash c语言 C++