zoukankan      html  css  js  c++  java
  • Effective C++ 条款54 让自己熟悉包括TR1在内的标准程序库

    1. TR1(Technical Report 1)是C++ 03标准的一个扩展,它并不属于C++ 03标准,只是一份草稿文件,用于指出下一版C++标准很可能吸收的特性.目前,它的大部分已被C++ 11采纳,成为官方标准.

    2. C++ 98列出的标准库的组成:

        STL(Standard Template Library,标准模板库).包含容器,迭代器,算法,函数对象,各种容器适配器(container adapter)和函数对象适配器(function object adapter)等.

        Iostream.覆盖用户自定缓冲功能,国际化I/O,以及预先定义好的对象cout和cin.

        国际化支持.比如多区域(multiple active locales)能力.像wchar_t(通常是16 bits/char)和wstring(有wchar_t组成的string)等类型都对促进Unicode有帮助.

        数值处理.包括复数模板好纯数值数组.

        异常阶层体系(exception hierarchy):包括base class exception及其derived class logic_error和runtime_error,以及更深继承的各个classes.

        C89标准程序库.

    3. TR1详细叙述了14个新组件(compnents),统统放在std命名空间的嵌套空间tr1内,包括:

        智能指针.如tr1::shared_ptr,tr1::weak_ptr等,详见条款13.

        tr1::function.此物可以表示任何callable entity(可调用物,也就是函数和函数对象),只要其签名复合目标,详见条款35.

        tr1::bind.它能够做STL绑定器(binders)bind1st和bind2nd所做的每一件事且增加了更多特性:tr1::bind可以和const金额non-const成员函数共同运作,可以和by-reference参数协同运作,而且不需要特殊协助就可以处理函数指针.详见条款35

        Hase tables.用来实现sets,multisets,maps,multimaps,每个容器接口都与之前标准相同,其命名为"tr1::unordered_set", "tr1::unordered_multiset", "tr1::unordered_map","tr1::unordered_multimap",说明它们和set,multiset,map,multimap的不同:以hash为基础的这些tr1容器内的元素并无可预期次序.

        正则表达式(Regular expressions).包括包括以正则表达式为基础的字符串查找和替换,或是从某个匹配字符串到另一个匹配字符串的注意迭代等等.

        Tuples(变量组).标准库pair template的新一代制品,pair只能持有两个对象,而tr1::tuple可持有任意个数对象.

        tr1::array.本质上是个"STL化"数组,即一个支持成员函数如begin和end的数组.不过tr1::array的大小固定,并不适用动态内存.

        tr1::mem_fn.其语句构造与成员函数指针一致,正如tr1::bind纳入并扩充了C++ 98的bind1st和bind2nd的能力,mem_fn纳入并扩充了C++98的mem_fun和mem_fun_ref的能力.

        tr1::reference_wrapper."让reference的行为更像对象",造成容器"犹如持有reference".

        随机数生成工具.大大超越了rand.

        数学特殊函数,包括Laguerre多项式,Bessel函数,完全椭圆积分(complete elliptic integrals)以及其他函数.

        C99 兼容扩充.一大堆函数和模板,用来将许多C99程序库特性带劲C++.

    第二组TR1组件由更精巧的template编程技术(包括模板元编程,template metaprogramming,见条款48)构成:

        Type traits.一组trait classes(见条款47),用以提供类型的编译期信息.如指出某个类型是否是个内置类型,是否提供virtual析构函数,是否是个empty class,是否可隐式转换为其他类型等等.TR1的type traits也可以显现该给定类型之适当齐位(proper alignment),这对定制性内存分配器(见条款50)的编写十分重要.

        tr1::result_of.这是个template,用来推导函数调用的返回类型,tr1::result_of使得"指涉函数返回类型"变得十分容易.

    4. TR1本身只是一份文档,并不涉及实现.然而TR1的14个组件中的10个已在免费的Boost程序库(见条款55)提供支持,虽然有些Boost机能并不完全吻合TR1规范.

        所有的boost组件都位于命名空间boost内,可以使用

    namespace std{
        namespace std::tr1=::boost;
    }
    View Code

    通过指涉std::tr1::来指涉::boost

  • 相关阅读:
    bzoj3514 Codechef MARCH14 GERALD07加强版
    差分数列(学习笔记)
    mysql 数据库 replace、regexp的用法
    30岁前男人需要完成的事
    硬盘故障修复十大攻略
    网络工程师考试必备知识
    系统不能正常关机
    忘记XP登入密码的9种解决办法
    Mysql全文搜索match...against的用法
    双绞线网线的连接方式
  • 原文地址:https://www.cnblogs.com/reasno/p/4804178.html
Copyright © 2011-2022 走看看