c++ stl库

1、vector

1、基本用法

使用时先加上#include

可变长数组,倍增的思想
size() 返回元素个数
empty() 返回是否为空
clear() 清空
front()/back() 返回第一个数/返回最后一个数
push_back()/pop_back() 向vector的最后插入一个数/把vector最后一位数删除
begin()/end() vecotr的第0个数 即a[0] /vector的最后一个数的后面一个数 即a[size]
[] 支持随机寻址(跟数组一样)
支持比较运算,按字典序

2、思想

系统为某一个程序分配空间的时候, 所需要的时间与空间的大小无关,与申请次数有关

也就是说: 申请一个100个空间大小跟1空间大小所需要的时间是一样的

​ 但是申请100的1空间大小就远大于申请一个100个空间大小

3、简单应用
	vector<int> a; // 定义一个vector变量
	vector<int> a(10);//定义一个固定长度的vector变量


	vector<int> a(10,3); //定义一个长度为10的vector,并且每一个数都是3
	for (auto i : a) cout <<  i << endl;// 结果输出十个三

	a.size()//返回的是元素的个数   时间复杂度为O(1)
        
    a.empty();//返回的是a是不是空的  如果是空的 返回true  ;否则返回false

    a.clear();//清空数组中的所有元素

2、pair

可以存储二元组

1、基本用法

pair<int, int>
first, 第一个元素
second, 第二个元素
支持比较运算,以first为第一关键字,以second为第二关键字(字典序)

2、作用:

假设某一个东西有两种属性,可以使用pair来存储

3、简单应用:
	pair<int, string> p;//定义
    
	p.first;//取出第一个元素
	p.second;//取出第二个元素

	//构造方式
	p = make_pair(10, "123");
	p = {20, "abc"};

	pair<int, pair<int,int>> p;//用pair存储三个属性




3、string,字符串

1、基本用法

​ size()/length() 返回字符串长度
​ empty()
​ clear()
​ substr(起始下标,(子串长度)) 返回子串
​ c_str() 返回字符串所在字符数组的起始地址

2、简单应用:
	string a = "abc";

	a += "d";
	a += 'e';

	cout << a << endl;

	cout << a.substr(1, 10) << endl;//从下标1开始往后的十个数字
	cout << a.substr(1) << endl;  //从下标1开始的所有数字

4、queue, 队列

1、基本用法

​ size()
​ empty()
​ push() 向队尾插入一个元素
​ front() 返回队头元素
​ back() 返回队尾元素
​ pop() 弹出队头元素

2、简单应用
	queue<int> a;//定义队列

	a = queue<int>();//清空队列  相当于clear()

5、priority_queue, 优先队列,默认是大根堆

​ push() 插入一个元素
​ top() 返回堆顶元素
​ pop() 弹出堆顶元素
​ 定义成小根堆的方式:priority_queue<int, vector, greater> q;

6、stack, 栈

​ size()
​ empty()
​ push() 向栈顶插入一个元素
​ top() 返回栈顶元素
​ pop() 弹出栈顶元素

7、deque, 双端队列

​ size()
​ empty()
​ clear()
​ front()/back() 返回第一个元素/返回最后一个元素

​ push_back()/pop_back() 向最后插入一个元素 /弹出最后一个元素
​ push_front()/pop_front() 向队首插入一个元素 /从队首弹出元素
​ begin()/end()
​ []

8、set, map, multiset, multimap, 基于平衡二叉树(红黑树),动态维护有序序列

​ size()
​ empty()
​ clear()
​ begin()/end()
​ ++, – 返回前驱和后继,时间复杂度 O(logn)

set/multiset

set不能有重复元素 multiset可以有重复元素

​ insert() 插入一个数
​ find() 查找一个数
​ count() 返回某一个数的个数
​ erase()
​ (1) 输入是一个数x,删除所有x O(k + logn)
​ (2) 输入一个迭代器,删除这个迭代器
​ lower_bound()/upper_bound()
​ lower_bound(x) 返回大于等于x的最小的数的迭代器
​ upper_bound(x) 返回大于x的最小的数的迭代器

map/multimap

​ insert() 插入的数是一个pair
​ erase() 输入的参数是pair或者迭代器
​ find()
​ [] 注意multimap不支持此操作。 时间复杂度是 O(logn)
​ lower_bound()/upper_bound()

	map<string,int> a;
	a["abc"] = 1;

	cout << a["abc"] << endl;

9、unordered_set, unordered_map, unordered_multiset, unordered_multimap, 哈希表

​ 和上面类似,增删改查的时间复杂度是 O(1)
​ 不支持 lower_bound()/upper_bound(), 迭代器的++,–

10、bitset, 圧位

​ bitset<10000> s;
​ ~, &, |, ^
​ >>, <<
​ ==, !=
​ []

count() 返回有多少个1

any() 判断是否至少有一个1
none() 判断是否全为0

set() 把所有位置成1
set(k, v) 将第k位变成v
reset() 把所有位变成0
flip() 等价于~
flip(k) 把第k位取反

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少年负剑去

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值