STL模板库

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

 

list容器:

头文件:#include <list>

是一个功能齐全的双向链表

支持的运算符:

== !=

<= >= < > 按照strcmp的比较规则进行比较

注意:元素必须支持 == 或者 < 运算符,如果不支持则需要重载 == 或者 < 运算符函数

注意: == != 调用 ==函数,> < >= <= 调用 <函数,重载时必须实现为常函数

常用的成员函数:

构造函数:

list( size_type num, const TYPE& val = TYPE() );

功能:创建链表时添加num个值为val的元素

list( input_iterator start, input_iterator end );

功能:使用已有的数组初始化链表

start:已有数组的第一个元素的指针或迭代器

end:最后一个元素的下一个位置的指针或迭代器

void assign( size_type num, const TYPE& val );

功能:给链表赋值num个值为val的数据

void assign( input_iterator start, input_iterator end );

功能:给链表赋值一组已有的数据

TYPE& back();

功能:返回链表中的最后一个元素

TYPE& front();

功能:返回链表中的第一个元素

iterator begin();

功能:返回一个正向迭代器,指向链表中的第一个元素

const_iterator begin() const;

功能:返回一个正向常迭代器,指向链表中的第一个元素

reverse_iterator rbegin();

功能:返回一个逆向迭代器,指向链表的最后一个元素

const_reverse_iterator rbegin() const;

功能:返回一个逆向常迭代器,指向链表的最后一个元素

iterator end();

功能:返回一个正向迭代器,指向链表中的最后一个元素的下一个位置

const_iterator end() const;

功能:返回一个正向常迭代器,指向链表中的最后一个元素的下一个位置

reverse_iterator rend();

功能:返回一个逆向迭代器,指向链表中的第一个元素的前一个位置

const_reverse_iterator rend() const;

功能:返回一个逆向常迭代器,指向链表中的第一个元素的前一个位置

iterator erase( iterator loc );

功能:删除链表中某个位置元素,位置以迭代器方式提供

iterator erase( iterator start, iterator end );

功能:删除链表中某范围的元素,范围以迭代器方式提供 [start,end)

注意:list的迭代器不支持 it+n it+=n 这类运算,因为list是不支持随机访问的,只能自变++\--

iterator insert( iterator loc, const TYPE& val );

功能:在链表指定位置前,插入一个值为val的元素,位置以迭代器方式提供

void insert( iterator loc, size_type num, const TYPE& val );

功能:在链表指定位置前,插入num个值为val的元素,位置以迭代器方式提供

template<TYPE> void insert( iterator loc, input_iterator start,input_iterator end );

功能:在链表指定位置前,插入一组元素,位置以迭代器方式提供

void merge( list &lst );

功能:按照顺序合并两个链表,前提是合并之前必须各自有序,否则需要先各自排序,再合并才能是有序的

void merge( list &lst, BinPred compfunction );

功能:按照顺序合并两个链表,结果也是有序的,如果链表的元素不支持 < 运算符,则需要提供元素的比较函数

注意:合并后 lst 的元素就都没了

void pop_back();

功能:尾删除

void pop_front();

功能:头删除

void push_back( const TYPE& val );

功能:尾添加

void push_front( const TYPE& val );

功能:头添加

void remove( const TYPE &val );

功能:按照删除值为val的所有元素

void remove_if( UnPred pr );

功能:删除符合条件的元素

pr:

bool func_if(int num)

{

return num < right && num > left; // 条件

}

void resize( size_type num, const TYPE& val = TYPE() );

功能:修改链表的元素个数

注意:可以往大了改,相当于增加元素,增加的元素的值是val

也可以往小了改,相当于删除元素

void reverse();

功能:链表逆序

void sort();

void sort( BinPred p );

功能:对链表元素进行快速排序,需要支持 < 运算,否则需要回调比较函数

p:

bool cmp(T a,T b)

{

return a < b;

}

void splice( iterator pos, list& lst );

功能:把链表lst剪切到当前链表的指定位置前面,位置以迭代器方式提供,lst也会删除所有元素

void splice( iterator pos, list& lst, iterator del );

功能:把链表lst指定位置del的元素,剪切到当前链表的指定位置前面,位置以迭代器方式提供,lst中的del也会被删除

void splice( iterator pos, list& lst, iterator start,iterator end );

功能:把链表lst指定范围[start,end)的元素,剪切到当前链表的指定位置前面,位置以迭代器方式提供,lst中的[start,end)的元素也会被删除

void unique();

功能:删除链表中重复的元素

void unique( BinPred pr );

注意:如果链表中的元素不支持==运算符,则需要提供回调比较相等的函数

pr:

bool cmp(T a,T b)

{

return a == b;

}

queue队列容器:

头文件:#include <queue>

链式队列

不支持运算符,没有迭代器,只有无参构造、拷贝构造

push 队尾入队

pop 队头出队

front 获取队头元素

back 获取队尾元素

empty 判断是否队空

size 获取队列元素个数

stack栈容器:

头文件:#include <stack>

链式栈

不支持运算符,没有迭代器,只有无参构造、拷贝构造

push 入栈

pop 出栈

top 获取栈顶元素

empty 判断是否栈空

size 获取栈中元素个数

priority_queue优先队列容器:

头文件:#include <queue>

优先队列,该队列会对入队的数据进行排序,元素越大,优先级越高,优先出队

注意:存储的元素必须满足 < 运算符,否则需要重载才能入队

push 入队 注意:入队后的元素会按从大到小顺序排列优先级

pop 出队 优先级最高的先出队

top 获取队头元素

empty 判断是否队空

size 获取队中元素个数

deque双端队列容器:

头文件:#include <deque>

双端队列容器,用法与vector几乎一模一样,底层采用双向链表存储数据,本来是不支持随机访问的,但是底层重载了[]运算符函数,还是通过遍历来访问元素,只是使用[]时感觉像随机访问而已

因为vector是顺序表,deque是链式表,deque更节约内存,但是速度上vector更快

其实就是在vector的基础上增加了两端管理的功能,但是已经脱离了队列的限制

支持的运算符:

== !=

> < >= <=

[] 使用规则与vector

set容器:

头文件:#include <set>

集合容器,特点是元素不能重复,还会对元素自动排序,因此存储的元素必须支持 == 运算符、 < 运算符,否则需要重载,是链式结构,只能使用迭代器遍历

构造函数:只有无参构造、拷贝构造

支持的运算符:与list一样

成员函数:

iterator begin();

功能:返回一个正向迭代器,指向set中的第一个元素

const_iterator begin() const;

功能:返回一个正向常迭代器,指向set中的第一个元素

void clear();

功能:清空set所有元素

size_type count( const key_type& key );

功能:获取集合中key元素的数量,结果只能是0或1,可用于判断key是否存在,在此容器中意义不大

iterator insert( iterator i, const TYPE& val );

功能:向集合中添加一个元素

void insert( input_iterator start, input_iterator end );

功能:向集合中添加一组元素

pair<iterator,bool> insert( const TYPE& val );

功能:向集合中添加一个元素

例子: pair<set<int>::iterator,bool> p = s.insert(num);

cout << *p.first << " " << p.second << endl;

返回值可以不接,p.first表示num加入set后的位置 p.second 表示num加入是否成功

iterator find( const key_type& key );

功能:查找集合中值为key的元素,并返回该元素的迭代器,找不到返回end

pair<iterator, iterator> equal_range( const key_type& key );

功能:查找集合中所有值为key的元素,并返回一个迭代器范围,在此容器中毫无意义

key_compare key_comp() const;

功能:返回一个用于元素间值比较的函数对象

value_compare value_comp() const;

功能:返回一个用于元素间值比较的函数对象,此容器中与key_comp功能一样

iterator lower_bound( const key_type& key );

功能:返回一个指向大于或者等于key值的第一个元素的迭代器(>=key的最小值)

iterator upper_bound( const key_type& key );

功能:在当前集合中返回第一个指向大于Key值的元素的迭代器。

multiset容器:

头文件:#include <set>

多元集合容器,特点是元素可以重复,会对元素自动排序,因此存储的元素必须支持<运算符,只能通过迭代器遍历

size_type count( const key_type& key );

功能:获取值为key的元素的数量,在此容器中更有意义

pair<iterator, iterator> equal_range( const key_type& key );

功能:查找集合中所有值为key的元素,并返回一个迭代器范围,在此容器中有意义

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值