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

选用其他容器做底层


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值