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

STL全称是Standand Template Library,中文名称是标准模板库,是由惠普实验室提供的(由惠普使用C++模板语言封装好的常用的数据结构与算法) [侯捷 STL源码剖析]

里面有三类内容:

算法:以函数模板的形式实现的常用算法:max、min、swap、find、sort

容器:以类模板的形式实现的常用数据结构,例如:栈、队列、链式表、顺序表、红黑树

迭代器:它是容器的成员,用于帮助访问容器中的元素,使用的方法类似于指针

常用的算法函数:

#include <algorithm>

iterator find(iterator start,iterator end,const TYPE& val);

功能:顺序查找

start:指向第一个元素的指针或迭代器

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

val:待查找的元素数据

返回值:

找到:返回[start,end)范围的指针或迭代器

找不到:返回end

注意:如果存在多个待查找的元素时,只会返回第一个的指针或迭代器

void sort(iterator start,iterator end);

void sort(iterator start,iterator end,StrictWeakOrdering cmp);

功能:快速排序

start:指向第一个元素的指针或迭代器

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

注意:待排序的数据类型要支持 < 运算符,否则后面要提供比较的回调函数

bool cmp( int a, int b ) {

return a > b;

}

vector向量容器:

头文件:#include <vector>

采用顺序结构的内存存储数据,可以通过下标来随机访问数据,因此也被称为数组容器

构造函数:

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

num:数组的长度

val:初始化数据,全部初始化

vector( input_iterator start, input_iterator end );

功能:使用一组已有的数组的数据初始化构造新数组

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

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

支持的运算符:

== != <= >= < > 按照strcmp的比较规则进行比较,是整个容器对象进行比较

[] 一样是不会检查下标是否合法,非法时有可能段错误

vector常用的成员函数:

TYPE& at( size_type loc );

const TYPE& at( size_type loc ) const;

功能:用于访问数组成员,相当于[],但当loc越界时,at函数一定会抛出异常,但是[]越界可能段错误、可能脏数据、可能一切正常,at要比[]更安全

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

功能:给数组的前num个元素赋值为val

void assign( input_iterator start, input_iterator end );

功能:通过一个数组给本数组赋值

TYPE& back();

功能:返回数组中的最后一个元素

TYPE& front();

功能:返回数组中的第一个元素

iterator begin();

功能:返回指向第一个元素的指针或迭代器

iterator end();

功能:返回指向最后一个元素的下一位置的指针或迭代器

注意:迭代器对于vector的用处不大,因为vector可以通过下标访问任意位置,但是对于其它容器而言,迭代器是它们遍历元素的唯一方式

vector<类型>::iterator it = 向量名.begin();

访问数据:*it

size_type capacity() const;

功能:获取数组的容量,数组的容量会随着数组的使用而动态变化

void clear();

功能:清空数组中所有的元素,容量不变,元素数量(size)变为0

bool empty() const;

功能:当数组为空时返回真

iterator erase( iterator loc );

功能:删除一个元素

iterator erase( iterator start, iterator end );

功能:删除一部分元素,不包括end

注意:删除元素时,必须要提供迭代器,不会影响容量

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

功能:在某个元素之前插入一个值为val的元素

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

功能:在某个元素之前插入num个值为val的元素

void insert(iterator loc,input_iterator start,input_iterator end );

功能:在某个元素之前,插入一组元素,这组元素以迭代器形式提供

size_type max_size() const;

功能:用于计算数组能存储的最大元素个数,因为数组的内存的扩张是有限的(4294967295个字节,最多4G),返回还能存储多少个元素,具体多少个由类型决定

void pop_back();

功能:删除最后一个元素

void push_back( const TYPE& val );

功能:在末尾添加一个元素,当数组的容量不够,则会在原来的基础上翻以倍后再添加

reverse_iterator rbegin();

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

reverse_iterator rend();

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

void reserve( size_type size );

功能:修改数组的容量

注意:只能往大了改

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

功能:修改数组的元素个数

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

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

void swap( container& from );

功能:交换两个数组的元素

list容器:

头文件:#include <list>

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

支持的运算符:

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

注意:元素必须支持 < 运算符

练习:使用 list 实现通讯录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值