仿SGI STL的traits技法

2022-07-06 17:24:14 字數 3226 閱讀 3310

首先是iterator traits,這個是用來萃取迭代器的特性的

1

#ifndef _stl_iterator_h_

2#define _stl_iterator_h_34

5 #include 6/*7

** iterator_traits----> 負責萃取迭代器的特性8*/

9namespace

zstd10;

12struct

outpt_iterator_tag{};

13struct forward_iterator_tag :public

inpt_iterator_tag {};

14struct bidirectional_iterator_tag :public

forward_iterator_tag {};

15struct random_access_iterator_tag :public

bidirectional_iterator_tag {};

1617 template18class pointer = t*, class reference = t&>

19struct

iterator20;

2728 template

29struct

iterator_traits30;

37 template

38struct iterator_traits39

;46 template

47struct iterator_traits48;

5556 template

57inline typename iterator::iterator_category

58 iterator_category(const iterator&it)

5963 template

64 inline typename iterator::value_type*

65 value_type(const iterator&it)

6669 template

70 inline typename iterator::difference_type*

71 difference_type(const iterator&it)

7275}76

#endif

然後是type traits,這個是用來萃取c++語言型別(type)的特性的

1

#ifndef _type_traits_h_

2#define _type_traits_h_34

/*5** _type_traits----> 負責萃取型別t的特性6*/

7 #include 8

using

namespace

std;

9namespace

zstd

10 };

12struct _false_type };

1314 template

15struct

_type_traits16;

2324 template<>

25struct _type_traits26;

33 template<>

34struct _type_traits35;

42 template<>

43struct _type_traitschar>44;

51 template<>

52struct _type_traitschar>53;

60 template<>

61struct _type_traits62

;69 template<>

70struct _type_traits71;

78 template<>

79struct _type_traitsshort>80;

87 template<>

88struct _type_traits89;

96 template<>

97struct _type_traitsint>98;

105 template<>

106struct _type_traits

107;

114 template<>

115struct _type_traitslong>

116;

123 template<>

124struct _type_traitslong>

125;

132 template<>

133struct _type_traitslong

long>

134;

141 template<>

142struct _type_traits

143;

150 template<>

151struct _type_traits

152;

159 template<>

160struct _type_traitsdouble>

161;

168169 template

170struct _type_traits171

;178 template

179struct _type_traits

180;

187 template<>

188struct _type_traits

189;

196 template<>

197struct _type_traitschar*>

198;

205 template<>

206struct _type_traitschar*>

207;

214 template<>

215struct _type_traitschar*>

216;

223 template<>

224struct _type_traits

225;

232 template<>

233struct _type_traits

234;

241}

242#endif

SGI STL簡記 十 仿函式 函式物件

仿函式或函式物件 functional 仿函式也即函式物件,一種具有函式特質的物件,其主要用於stl的演算法中搭配使用,使得演算法實現更為靈活 此外,仿函式也類似於迭代器,也需要提供必要的相應型別,以支援適配 仿函式的相應型別主要有 函式引數的型別 函式返回值型別 stl中已提供了部分仿函式類 已定...

SGI STL的記憶體池

tl中各種容器都有乙個可選的模板引數 allocator,也就是乙個負責記憶體分配的元件。stl標準規定的allcator 被定義在memory檔案中。stl標準規定的allocator只是單純地封裝operator new,效率上有點過意不去。sgi實現的stl裡,所有的容器都使用sgi自己定義的...

關於SGI STL中的容器的簡介

sgi stl主要含有兩類容器 序列式容器和關聯式容器。標準 array build in vector,heap,priority queue 非標準 list,slist,deque 配接器 stack,queue。1.vector 單向開口連續線性動態空間,一般採用倍加擴容,分攤常數時間o 1...