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位取反