STL

#include
vector a
vector 变长数组,倍增思想
size()
empty()
clear()
front()/back()
push_back()/pop_back()
begin()/end()
[]
支持比较运算,按字典序

pair<int, int>

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

#include
string 字符串

substr(起始下标, 长度) 返回子串
size()/length() 返回字符串长度
c_str() 返回字符串的首地址
empty()
clear()
to_string(x)

#include
queue 队列

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

#include
priority_queue 优先队列(堆)默认大根堆

push() 插入一个元素
top() 返回堆顶
pop() 弹出堆顶

定义成小根堆方式:
priority_queue<int , vector<int>,greater<int>> heap;//创建小根堆
priority_queue<int> heap
heap.push(-x)//创建小根堆

#include
stack 栈

size() 栈的大小/长度
empty() 是否为空
push() 向栈顶插入一个元素
top() 返回栈顶元素
pop() 弹出栈顶元素

#include
deque 双端队列,队头队尾都可以插入删除

size()
empty()
clear()
front()
back()
push_back()/pop_back()
push_front()/pop_front()
begin()/end()
[]
很少用,速度太慢了

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

size()
empty()
clear()
begin()/end() ++ -- 返回前驱后继  O(logn)


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

map/multimap
    insert() 插入的数是一个pair
    erase() 输入的参数是pair或者迭代器
    find()
    []  像数组一样使用 O(logn)
    lower_bound()/upper_bound()

unordered_set,unordered_map,unordered_multiset,unordered_multimap,哈希表

和上面类似,增删改查的时间复杂度是O(1)
不支持lower_bound()/upper_bound() 因为内部是无序的
不支持迭代器的++ --

bitset,压位
用于存储bool量
bitset<10000> S;
~s,&,|,^
>>,<<
==,!=
[]
count() 返回有多少个1

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

set() 把所有位置变为1
set(k,v) 将第K位变成V
reset() 把所有位变为0
flip() 等价于~
flip() 把第K位取反
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
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
vector<int> a;//定义一个vector
vector<int> a(10);//定义长度为10的vector
vector<int> a(10,3);//定义长度为10的vector,并初始化值为3
a.size();//返回元素个数---所有容器都有
a.empty();//判断是否为空---所有容器都有
a.clear();//清空---队列没有这个函数


a.front();//返回第一个数
a.back();//返回最后一个数
a.push_back();//向最后插入一个数
a.pop_back();//删掉最后一个元素

a.begin()//第一个数
a.end()//最后一个数的后面一个
for(vector<int>::iterator i=a.begin() ; i!=a.end(); i++)
{
cout<< *i <<" ";
}

//支持比较运算





//常用于存不同属性,按照某一种属性进行排序
pair<int, string> p;
pair<int, pair<int, string>> p;//存3个
p.first ,第一个元素
p.second,第二个元素
支持比较运算,以first为第一关键字,second第二关键字
p = make_pair(10,"xiaoming")
p ={20,"xiaohong"}





//----
string a="aaa";
a=a+"bbb";
a+="c";

size()/length()
cout<< a.substr(1,2)<<endl;//从下标1开始返回两个
a.substr(1)//从下标1开始的一个子串

printf("%s\s",a.c_str());//字符串a的起始地址
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

#include <set>

#include <map>
using namespace std;

int main()
{

set<int> S;//不允许重复元素
multiset<int> MS;//允许重复元素
return 0;


map<string,int> m;
m["aaa"]=1;
cout<<a["aaa"]<<endl;

}