C++_泛型编程与标准库(八)
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++_泛型编程与标准库(八)相关推荐
- C++_泛型编程与标准库(十)——set与map
C++_泛型编程与标准库(十)--set与map 参考:<侯捷泛化编程与标准库>.GNU9.3.0,vs2019 图中标红部分为自己的笔记理解 SET GNU 9.3.0的set部分代码如 ...
- C++_泛型编程与标准库(九)——红黑树的使用
C++_泛型编程与标准库(九)--红黑树的使用 参考:<侯捷泛化编程与标准库>.GNU9.3.0,vs2019 图中标红部分为自己的笔记理解 struct _Rb_tree_node_ba ...
- C++_泛型编程与标准库(七)
C++_泛型编程与标准库(七) 参考:<侯捷泛化编程与标准库>.VC2019 图中标红部分为自己的笔记理解 1.深度探索vector 笔者觉得在最新的VC2019下不是二倍增长,虽然是几何 ...
- C++_泛型编程与标准库(六)
C++_泛型编程与标准库(六) 图中标红部分为自己的笔记理解 1.iterator几个特定属性 vc2019的链表list迭代器部分代码 // CLASS TEMPLATE _List_iterato ...
- C++_泛型编程与标准库(五)
C++_泛型编程与标准库(五) 图中标红部分为自己的笔记理解 1.容器与容器之间的关系 2.深度探索list list是双向链表,从vc2019的list源码和以下图片都可以看出 template & ...
- C++_泛型编程与标准库(四)
C++_泛型编程与标准库(四) 图中标红部分为自己的笔记理解 1.注意一个特化的typedefine 2.分配器 2.2.VC2019的allocator类 1. allocate调用operator ...
- C++_泛型编程与标准库(三)
C++_泛型编程与标准库(三) 图中标红部分为自己的笔记理解 1.分配器简单测试,后面还会单讲 实测VC2019在Microsoft Visual Studio\2019\Community\VC\T ...
- C++_泛型编程与标准库(二)
C++_泛型编程与标准库(二) 图中标红部分为自己的笔记理解 为什么快?因为是红黑树实现的(高度平衡树)
- C++_泛型编程与标准库(一)
C++_泛型编程与标准库(一) 图中标红部分为自己的笔记理解
最新文章
- mysql下 ect p_Linux系统下启动MySQL的命令及相关知识
- linux(ubuntu)新建用户只有一个$问题,Ubuntu新建用户并指定目录
- 如何判断当前UI component是运行在IC还是non-IC环境下
- android 日期国际化,Flutter 日期时间选择类控件及国际化
- 用微前端的方式搭建类单页应用
- Problem E:结构体---点坐标结构体
- php cookie赋值使用
- 想要考计算机证要学,学长忠告:建议新生要考取的三类证书,不然你就虚度四年了...
- JavaScript学习(七十七)—统计字符串中出现次数最多的字符和每个字符出现的次数
- 设计模式 - (3)抽象工厂模式(创建型)
- MFC中给对话框重绘边框
- Tomcat反射时报错java.lang.ClassNotFoundException
- Modbus协议解析
- 如何将二维数组转化为一维数组
- linux忘记git库密码,忘记gitlab的root密码
- IntelliJ IDEA2020安装使用(保姆级)
- NLP实战 文本关键词提取
- 人生之路1.20代码 第一部分
- python f检验 模型拟合度_多元线性回归模型检验和预测
- opencv的图片处理:缩小尺寸为原图的一半【自己练习存档,没有参考价值,多看其他大神代码,谢谢】
热门文章
- 在线作图|在线做生态位宽度计算
- Microbiome | 中科院张惠明团队揭示RNA介导的DNA甲基化影响植物根部微生物群落!...
- pandas使用groupby函数计算dataframe数据中每个分组的N个数值的指数权重移动(滚动)平均、例如,计算某公司的多个店铺每N天(5天)的滚动销售额指数权重移动(滚动)平均
- Python使用matplotlib可视化Treemap图、treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比(Treemap)
- R语言rev函数对数据对象(向量、dataframe通过行或者列)反序实战
- pandas计算dataframe两列数据值相等的行号、取出DataFrame中两列值相等的行号
- R语言进行主成分分析(PCA)、使用prcomp函数进行主成分分析:碎石图可视化(scree plot)、R通过线图(line plot)来可视化主成分分析的碎石图(scree plot)
- R语言数据描述性统计(Descriptive statistics)实战:数据全局描述信息、数值数据的描述性统计(Numerical data)、离散型数据的描述性统计(Categorical)
- R语言使用igraph包进行网络(network)可视化实战
- R语言dataframe合并函数merge实战