真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MSVC2019的vector標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)源碼分析

好記性不如爛博客;stl源碼剖析那本書不想看,沒(méi)事(有事懶得做)看看微軟的vector實(shí)現(xiàn)。

專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)兗州免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了超過(guò)千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

以vector 為例

template <class _Ty, class _Alloc = allocator<_Ty>>
class vector { // varying size array of values
private:
    template<class>
    friendclass _Vb_val;//????
    friend _Tidy_guard;

using _Alty        = _Rebind_alloc_t<_Alloc, _Ty>;//會(huì)區(qū)分是不是默認(rèn)分配器_Default_allocator_traits或自定義allocator,是默認(rèn)的話,就是本身allocator,否則。。。模板嵌套太多了。。
using _Alty_traits = allocator_traits<_Alty>;

public:
    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<_Ty, typename _Alloc::value_type>,
        _MISMATCHED_ALLOCATOR_MESSAGE("vector", "T"));

using value_type      = _Ty;//int
using allocator_type  = _Alloc;//
using pointer         = typename _Alty_traits::pointer;
using const_pointer   = typename _Alty_traits::const_pointer;
using reference       = _Ty&;
using const_reference = const _Ty&;
using size_type       = typename _Alty_traits::size_type;
using difference_type = typename _Alty_traits::difference_type;

private:
//template // tests if allocator has simple addressing

  //_INLINE_VAR constexpr bool _Is_simple_alloc_v = is_same_v::size_type, size_t>&&
  //is_same_v::difference_type, ptrdiff_t>&&
  //is_same_v::pointer, typename _Alloc::value_type*>&&
  //is_same_v::const_pointer, const typename _Alloc::value_type*>;

using _Scary_val = _Vector_val, _Simple_types<_Ty>,
        _Vec_iter_types<_Ty, size_type, difference_type, pointer, const_pointer, _Ty&, const _Ty&>>>;//是否是simple類型,選擇不同的types,
      只要不是自定義類型,應(yīng)該都是選擇第一個(gè),其實(shí)第二個(gè)無(wú)非也是用自定義的類型。
public: using iterator = _Vector_iterator<_Scary_val>; using const_iterator = _Vector_const_iterator<_Scary_val>; using reverse_iterator = _STD reverse_iterator; using const_reverse_iterator = _STD reverse_iterator;
  //兩個(gè)構(gòu)造函數(shù)同理,區(qū)分自定義分配器類型 #define _GET_PROXY_ALLOCATOR(_Alty, _Al) static_cast<_Rebind_alloc_t<_Alty, _Container_proxy>>(_Al) 這種寫法第一次見,參數(shù)沒(méi)有實(shí)際作用,構(gòu)造一個(gè)新對(duì)象 _CONSTEXPR20_CONTAINER vector() noexcept(is_nothrow_default_constructible_v
<_Alty>) : _Mypair(_Zero_then_variadic_args_t{}) { _Mypair._Myval2._Alloc_proxy(_GET_PROXY_ALLOCATOR(_Alty, _Getal()));//_GET_PROXY_ALLOCATOR(_Alty, _Getal()),構(gòu)造一個(gè)allocator<_Container_proxy>
}
_CONSTEXPR20_CONTAINERexplicit vector(const _Alloc& _Al) noexcept : _Mypair(_One_then_variadic_args_t{}, _Al) { _Mypair._Myval2._Alloc_proxy(_GET_PROXY_ALLOCATOR(_Alty, _Getal())); }

  _Compressed_pair<_Alty, _Scary_val> _Mypair;//僅有的成員變量,實(shí)際繼承第一個(gè)模板參數(shù),負(fù)責(zé)分配數(shù)據(jù)內(nèi)存,并持有一個(gè)_Scary_val的變量,負(fù)責(zé)管理數(shù)據(jù)
  ......
  ......
}

分享文章:MSVC2019的vector標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)源碼分析
網(wǎng)站網(wǎng)址:http://weahome.cn/article/dsogoeo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部