zoukankan      html  css  js  c++  java
  • C++Primer 第十七章

    //1.当我们希望将一些数据组合成单一对象,但又不想麻烦地定义一个新的数据结构来表示这些数据的时候,tuple非常有用。其和其伴随类型和函数都定义在头文件tuple中,声明在命名空间std中。
    tuple<T1, T2,....., Tn> t;                    //t是一个tuple成员数为n,第i个成员的类型是Ti。所有的成员都进行值初始化。
    tuple<T1, T2,.....,    Tn> t(v1, v2,....,vn); //t是一个tuple,成员类型为T1....Tn,每个成员用对应的初始值vi进行初始化。此构造函数是explicit的。
    make_tuple<v1, v2,....,vn>;                   //返回一个用给定初始值初始化的tuple。tuple的类型由初始值的类型推断。
    == != <                                       //对两个tuple指向关系运算,注意:当两个tuple具有相同数量的成员时才可以比较它们
    get<i>(t);                                    //返回第i个数据成员的引用
    tuple_size<tupleType>::value;                 //一个类模板,可以通过一个tuple类型来初始化,有一个名为value的数据成员,类型为size_t,表示给定的tuple类型中成员的数量
    tuple_element<i, typleType>::type;            //一个类模板,可以通过一个常量和一个tuple类型来初始化,有一个type的成员,表示给定tuple类型中指定成员的类型
    // tuple的一个常见用途是从一个函数返回多个值。
    
    //2.bitset类型定义在头文件bitset中。声明在命名空间std中。可以将位运算符作用于bitset对象。
    //bitset的构造函数:
    bitset<n> b;                                  //b有n位,每一位均为0
    bitset<n> b(u);                               //b是unsigned long long值的低n位拷贝,如果n大于unsigned long long的大小,则b的高位将被置为0
    bitset<n> b(s, pos, m, zero, one);            //b是string s从位置pos开始的m个字符的拷贝。s只能包含zero和one,若s含有其他字符将抛出异常,pos默认为0,m默认为string::npos(32位程序为4字节最大整数,64位程序为8字节最大整数),zero默认为'0',one默认为'1'
    bitset<n> b(cp, pos, m, zero, one);           //类似于上个构造函数,但是从cp指向的字符数组中拷贝字符。如果未提供m则cp必须指向一个C风格字符串。若提供了m则从pos处开始至少有m个zero或one字符。
    // bitset第一位为最低位,最后一个为最高位
    string s = "101010";
    bitset<6> b(s);        //b = [6](0,1,0,1,0,1)  注意点:string的下标使用规则和bitset相反
    bitset<5> b1(1);       //b1 = [5](1,0,0,0,0)
    //bitset的操作:
    b.any()                        //b中是否存在置位的二进制位
    b.all()                        //b中所有位都置位了吗
    b.none()                       //b中不存在置位的二进制位吗
    b.count()                      //b中的置位数
    b.size()                       //返回b的位数
    b.test(pos)                    //返回pos位置是否置位
    b.set(pos, v)                  //将位置pos处置位bool值v,v默认为true,若未传递实参则将b中所有位置位
    b.set() 
    b.reset(pos)                   //将位置pos处的位复位,若没传递参数则将b中所有位复位
    b.reset()
    b.flip(pos)                    //改变位置pos处的位状态,若没有传递参数则改变b中所有位的位状态
    b.flip()
    b[pos]                         //返回b中pos处的位的引用
    b.to_ulong()                   //返回一个unsigned long或者unsigned long long,若待转类型大小不能接受b所表示的大小时,将发生overflow_over异常
    b.to_ullong()
    b.to_string(zero, one)         //返回一个string,表示b中的位模式。zero和one的默认值为'0', '1',用来表示b中的0,1
     
    //3.正则表达式regex:待研究
    
    //4.随机数:定义在头文件random中的随机数库定义了一组协作的类:随机数引擎类和随机数分布类。一个引擎类可以生成unsigned随机数序列,一个分布类使用一个引擎类来生成指定类型的、在给定范围内、服从特定概率分布的随机数。
    default_random_engine e;      //标准库定义了很多随机数引擎类,区别在于性能和随机性质量的不同。每个编译器都会选择其中的一个作为defalut_random_engine类型。此类型一般具有最常用的特性。
    auto value = e();             //value = 3499211612
    //随机数引擎操作:
    Engine e;                     //默认构造函数:使用该引擎类型默认的种子
    Engine e(s);                  //使用整形值s作为种子
    e.seed(s);                    //使用种子s重置引擎的状态
    e.min();                      //此引擎可生成的最小值和最大值
    e.max();
    Engine::result_type;          //此引擎生成的unsigned整形类型
    e.discard(u);                 //将引擎推进u步,u的类型是unsigned long long    discard[dis·card || dɪ'skɑːd]n.抛弃
    //随机数分布类定义了一个调用运算符,接受一个随机数引擎作为参数,分布对象使用它的引擎参数生成随机数,并将其映射到指定的分布:
    uniform_int_distribution<unsigned> u(0, 9);
    default_random_engine e;
    auto value = u(e);            //value = 8   
    //将分布对象和引擎对象的组合称为随机数发生器。注意点:对于给定的发生器,每次运行都会返回相同的数值序列。通过提供一个种子(就是一个数值),引擎可以利用它从序列的一个新的位置重新开始生成随机数。
    //随机数分布类的操作:
    Dist d;                      //默认构造函数,使d被准备好使用
    d(e);                        //用相同的e来连续调用d的话,会根据d的分布式类型生成一个随机数序列。e是一个随机数引擎。
    d.min();                     //返回d(e)能生成的最小值和最大值
    d.max();                    
    d.reset();                   //重建d的状态,使得随后对d的使用不在依赖于d已经生成的值
    //每个随机数分布类都有一个默认模板实参。生成浮点数的分布类型默认生成double值,而生成整形值的分布默认生成int值。
    //常用的随机数分布类:
    bernoulli_distribution       //非模板,总是生成bool值
    uniform_int_distribution<IntT> u(m, n); //均匀分布, IntT表示要求一个整形,但不包括bool和任何char类型。m为返回的最小值,n为返回的最大值,m默认为0, n默认为类型IntT对象可以表示的最大值。
    uniform_int_distribution<RealT> u(m, n);//均匀分布,RealT表示float, double, long double中的一种
    //其余随机数分布类包括:伯努利分布, 泊松分布, 正态分布, 抽样分布。
  • 相关阅读:
    Fedora下使用minicom及USB串口线
    fedora装机后要运行的脚本(原创)
    终极 Shell
    深入学习 Git 工作流
    如何使用Git上传项目代码到github
    Fedora23 chrome 安装
    Fedora下安装deb包方法
    vim自动缩进设置
    Fedora 20 安装搜狗拼音输入法
    C语言stat()函数:获取文件状态
  • 原文地址:https://www.cnblogs.com/szn409/p/5648175.html
Copyright © 2011-2022 走看看