C++_泛型编程与标准库(八)

参考:《侯捷泛化编程与标准库》、GNU9.3.0,vs2019

图中标红部分为自己的笔记理解

1、array

GNU 2.9的写法

array GNU9.3.0部分源码

array没有ctor,没有dtor,包括vs2019也是

template<typename _Tp, std::size_t _Nm>struct __array_traits{typedef _Tp _Type[_Nm];//_Type为数组名类型,通过其定义出来就是一个数组的数组名typedef __is_swappable<_Tp> _Is_swappable;typedef __is_nothrow_swappable<_Tp> _Is_nothrow_swappable;static constexpr _Tp&_S_ref(const _Type& __t, std::size_t __n) noexcept{ return const_cast<_Tp&>(__t[__n]); }static constexpr _Tp*_S_ptr(const _Type& __t) noexcept{ return const_cast<_Tp*>(__t); }};template<typename _Tp, std::size_t _Nm>struct array{typedef _Tp                        value_type;typedef value_type*                  pointer;typedef const value_type*                       const_pointer;typedef value_type&                           reference;typedef const value_type&                     const_reference;typedef value_type*                     iterator;typedef const value_type*                  const_iterator;typedef std::size_t                              size_type;typedef std::ptrdiff_t                            difference_type;typedef std::reverse_iterator<iterator>       reverse_iterator;typedef std::reverse_iterator<const_iterator>   const_reverse_iterator;// Support for zero-sized arrays mandatory.typedef _GLIBCXX_STD_C::__array_traits<_Tp, _Nm> _AT_Type;typename _AT_Type::_Type                         _M_elems;//注意这两行很重要,加深typename的用法....}

GNU9.3.0内部定义数组的方法是typename _AT_Type::_Type,泛型编程typename经常用到,一定要理解其含义,意思是告诉编译器,标明_AT_Type::_Type是一种类型typename _AT_Type::_Type _M_elems;_M_elems是被定义的数组头指针,同时也是数组名,可以通过以下代码观察

vs2019相对于GNU,array的内部实现要简单许多,vs2019直接在类的尾部定义了一个数组

2、deque

在此处可以看出GNU9.3.0版本buffersize也没有变化,当缓冲区不够时,双倍扩充内存,并将数据拷贝到新内存的中段

3、queue、stack调用的是deque进行改装

GNU9.3.0的queue与stack

vs2019的queue与stack

选用其他容器做底层


C++_泛型编程与标准库(八)相关推荐

  1. C++_泛型编程与标准库(十)——set与map

    C++_泛型编程与标准库(十)--set与map 参考:<侯捷泛化编程与标准库>.GNU9.3.0,vs2019 图中标红部分为自己的笔记理解 SET GNU 9.3.0的set部分代码如 ...

  2. C++_泛型编程与标准库(九)——红黑树的使用

    C++_泛型编程与标准库(九)--红黑树的使用 参考:<侯捷泛化编程与标准库>.GNU9.3.0,vs2019 图中标红部分为自己的笔记理解 struct _Rb_tree_node_ba ...

  3. C++_泛型编程与标准库(七)

    C++_泛型编程与标准库(七) 参考:<侯捷泛化编程与标准库>.VC2019 图中标红部分为自己的笔记理解 1.深度探索vector 笔者觉得在最新的VC2019下不是二倍增长,虽然是几何 ...

  4. C++_泛型编程与标准库(六)

    C++_泛型编程与标准库(六) 图中标红部分为自己的笔记理解 1.iterator几个特定属性 vc2019的链表list迭代器部分代码 // CLASS TEMPLATE _List_iterato ...

  5. C++_泛型编程与标准库(五)

    C++_泛型编程与标准库(五) 图中标红部分为自己的笔记理解 1.容器与容器之间的关系 2.深度探索list list是双向链表,从vc2019的list源码和以下图片都可以看出 template & ...

  6. C++_泛型编程与标准库(四)

    C++_泛型编程与标准库(四) 图中标红部分为自己的笔记理解 1.注意一个特化的typedefine 2.分配器 2.2.VC2019的allocator类 1. allocate调用operator ...

  7. C++_泛型编程与标准库(三)

    C++_泛型编程与标准库(三) 图中标红部分为自己的笔记理解 1.分配器简单测试,后面还会单讲 实测VC2019在Microsoft Visual Studio\2019\Community\VC\T ...

  8. C++_泛型编程与标准库(二)

    C++_泛型编程与标准库(二) 图中标红部分为自己的笔记理解 为什么快?因为是红黑树实现的(高度平衡树)

  9. C++_泛型编程与标准库(一)

    C++_泛型编程与标准库(一) 图中标红部分为自己的笔记理解

最新文章

  1. mysql下 ect p_Linux系统下启动MySQL的命令及相关知识
  2. linux(ubuntu)新建用户只有一个$问题,Ubuntu新建用户并指定目录
  3. 如何判断当前UI component是运行在IC还是non-IC环境下
  4. android 日期国际化,Flutter 日期时间选择类控件及国际化
  5. 用微前端的方式搭建类单页应用
  6. Problem E:结构体---点坐标结构体
  7. php cookie赋值使用
  8. 想要考计算机证要学,学长忠告:建议新生要考取的三类证书,不然你就虚度四年了...
  9. JavaScript学习(七十七)—统计字符串中出现次数最多的字符和每个字符出现的次数
  10. 设计模式 - (3)抽象工厂模式(创建型)
  11. MFC中给对话框重绘边框
  12. Tomcat反射时报错java.lang.ClassNotFoundException
  13. Modbus协议解析
  14. 如何将二维数组转化为一维数组
  15. linux忘记git库密码,忘记gitlab的root密码
  16. IntelliJ IDEA2020安装使用(保姆级)
  17. NLP实战 文本关键词提取
  18. 人生之路1.20代码 第一部分
  19. python f检验 模型拟合度_多元线性回归模型检验和预测
  20. opencv的图片处理:缩小尺寸为原图的一半【自己练习存档,没有参考价值,多看其他大神代码,谢谢】

热门文章

  1. 在线作图|在线做生态位宽度计算
  2. Microbiome | 中科院张惠明团队揭示RNA介导的DNA甲基化影响植物根部微生物群落!...
  3. pandas使用groupby函数计算dataframe数据中每个分组的N个数值的指数权重移动(滚动)平均、例如,计算某公司的多个店铺每N天(5天)的滚动销售额指数权重移动(滚动)平均
  4. Python使用matplotlib可视化Treemap图、treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比(Treemap)
  5. R语言rev函数对数据对象(向量、dataframe通过行或者列)反序实战
  6. pandas计算dataframe两列数据值相等的行号、取出DataFrame中两列值相等的行号
  7. R语言进行主成分分析(PCA)、使用prcomp函数进行主成分分析:碎石图可视化(scree plot)、R通过线图(line plot)来可视化主成分分析的碎石图(scree plot)
  8. R语言数据描述性统计(Descriptive statistics)实战:数据全局描述信息、数值数据的描述性统计(Numerical data)、离散型数据的描述性统计(Categorical)
  9. R语言使用igraph包进行网络(network)可视化实战
  10. R语言dataframe合并函数merge实战