STL中常用的容器和函数


C++的标准模板库(Standard Template Library, 简称STL)是一个容器和算法的类库,比较常用的容器有stack、queue、priorty_queue、set、vector、pair、string等,比较常用的算法有sort、max、min、abs、swap、reverse等

所有容器都支持的方法

方法 描述 示例 时间复杂度
size 返回容器中的元素数目 s.size() O(1)
empty 判断容器是否为空,容器空时,返回true s.empty() O(1)

栈(stack)

包含在stack头文件中

特点:只能在栈顶放入元素,在栈顶删除元素,后进先出

方法 描述 示例 时间复杂度
push 入栈(栈顶) s.push(x) O(1)
pop 出栈(栈顶) s.pop() O(1)
top 返回栈顶元素 s.top() O(1)

循环队列(queue)

包含在queue头文件中

特点:只能从队头删除元素,从队尾放入元素,先进先出

方法 描述 示例 时间复杂度
push 入队(队尾) que.push(x) O(1)
pop 出队(队头) que.pop() O(1)
front 返回队头元素 que.front() O(1)
back 返回队尾元素 que.back() O(1)

优先队列(priority_queue)

包含在queue头文件中

priority_queue可以理解为一个大根二叉堆,堆顶元素为最大值

声明一个从大到小取出数值的优先队列

priority_queue<int> que;//大根堆

声明一个从小到大取出数值的优先队列

priority_queue<int, vector<int>, greater<int> > que;//小根堆
方法 描述 示例 时间复杂度
push 把元素x插入堆 que.push(x) O(logn)
pop 删除堆顶元素 que.pop() O(logn)
top 返回堆顶元素 que.top() O(1)

有序集合(set)

包含在set头文件中

set由红黑树实现,set中的元素不能重复,有自动去重的功能

方法 描述 示例 时间复杂度
clear 清空 s.clear() O(n)
insert 插入元素x s.insert(x) O(logn)
find 返回等于x的元素的迭代器。若不存在等于x的元素,则返回s.end() s.find(x) O(logn)
erase 删除迭代器it指向的元素 s.erase(it) O(logn)
erase 删除等于x的元素 s.erase(x) O(logn)
count 返回集合中等于x的元素个数 s.count(x) O(logn)

向量(vector)

包含在vector头文件中

vector是一个动态数组,可以像数组一样用下标访问元素

方法 描述 示例 时间复杂度
clear 清空 v.clear() O(n)
push_back 把元素x放入vector尾部 v.push_back(x) O(1)
pop_back 删除vector尾部的最后一个元素 v.pop_back O(1)

字典(map)

包含在map头文件中

map是一个关联容器,提供一对一的键值对(key-value)映射

方法 描述 示例 时间复杂度
clear 清空 m.clear() O(n)
insert 插入键值对 m.insert(make_pair(key, value)) O(logn)
find 查找key为x的二元组,并返回其迭代器 m.find(x) O(logn)
[ ] 操作符 返回key映射到的value m[key] O(logn)
[ ] 操作符 对m[key]来进行赋值操作 m[key] = value O(logn)

对组(pair)

包含在utility头文件中,但一般来说,iostream也包含它

方法 描述 示例 时间复杂度
make_pair 构造一个对组 make_pair(1, 2)
first 返回第一个元素 p.first O(1)
second 返回第二个元素 p.second O(1)

字符串(string)

包含在string头文件中

string是一个类,不用考虑内存分配问题,并且提供了一系列的操作函数

操作 string char*
定义 string s char s[105]
获取第i个字符 s[i] s[i]
返回长度 s.size() strlen(s)
读入一行 getline(cin, s) gets(s)
赋值 s = “hello” strcpy(s, “hello”)
拼接 s += “world” strcat(s, “world”)
比较 s == “hello” strcmp(s, “hello”)

sort函数

包含在algorithm头文件中

用法: s o r t ( ) sort(起始地址,结束地址,排序方法)

注意:

  1. sort排序的范围是前闭后开,例如:sort(arr, arr+10); 排序的范围是从arr[0]到arr[9]

  2. sort的排序方法不写的话,默认是从小到大

从大到小的排序方法

bool cmp(int a, int b)
{	
	return a > b;
}

max、min函数

max(x, y):返回x和y中的最大值

min(x, y):返回x和y中的最小值

abs函数

abs(x):返回x的绝对值,x为整数。

如果要返回浮点数的绝对值,要用math.h头文件下的fabs

swap函数

swap(x, y):交换x和y的值

reverse函数

reverse(a, b):可以将数组指针在[a, b)之间的元素或容器的迭代器在[a, b)范围内的元素进行反转。

翻转数组

reverse(arr, arr + n);

翻转string

reverse(s.begin(), s.end());
发布了171 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43772166/article/details/104076670