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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector> //vector的头文件
#include<queue> //queue和priority_queue的头文件
#include<map>
#include<set>

using namespace std;

int main()
{
ios::sync_with_stdio(false);
//定义一个长度为10的vector,并且全部初始化为3
// vector<int> a(10, 3);
// for(int i : a) cout << i << endl;

// a.size(); //返回元素个数(所有容器都有)
// a.empty(); //返回是否为空(所有容器都有)
// a.clear(); //清空(并不是所有容器都有)
//cout << a.front() << ' ' << a.back() << endl;(输出第一个和最后一个元素)
//pop_back() 弹出最后一个元素

vector<int> a;

//添加元素 push_back()
for(int i = 0; i < 10; i ++) a.push_back(i);

for(int i = 0; i < 10; i ++) cout << a[i] << ' '; //随机寻址访问
cout << endl;

//迭代器访问
for(auto i = a.begin(); i != a.end(); i ++) cout << *i << ' ';
cout << endl;
for(auto i : a) cout << i << ' ';
cout << endl;

//pair
pair<int, int> p;
p = make_pair(1, 2); //pair的初始化
p = {3, 4}; //pair的初始化

//输出pair的第一和第二个元素
cout << p.first << ' ';
cout << p.second << endl;
//pair<int, pair<int, int>> 实现用pair存储三个元素

//string (有clear)
//字符串可相加
//a.c_str()可以返回字符串的起始地址
string s = "1234";

cout << s.substr(1, 2) << endl; //从下标1开始输出长度为2的字符串(第二个参数可以省)


//queue
/*
push() 队尾插入
pop() 队头弹出
front() 返回队头元素
back() 返回队尾元素
没有clear()
*/
// queue<int> q;

//q = queue<int>(); 如需删除queue中的所有元素,可以重新构造一个queue

/*priority_queue() 优先队列(堆)
push() 插入一个元素
pop() 弹出堆顶元素
top() 返回堆顶元素
没有clear
*/

priority_queue<int> heap; //默认是大根堆

//实现小根堆
/*
1.在push是将要存的数的负数存入(相当于小根堆)
2.在定义时直接定义小根堆

*/

priority_queue<int, vector<int>, greater<int>> uheap; // 小根堆


/*stack
push
top
pop
*/

/*
deque(双端队列) ->效率低
size()
empty()
clear()
front()
back()
push_back()/pop_back()
push_front()/pop_front()
支持随机寻址
*/
deque<int> d;


/*
set/multiset
insert()
find()
count()
erase()
(1)输入是一个x, 删除所有x
(2)输入是一个迭代器, 删除这个迭代器
*lower_bound()/upper_bound()
lower_bound(x) 返回大于等于x的最小的数的迭代器
upper_bound(x) 返回大于x的最小的数的迭代器
*/

/*
map/multimap
insert() 插入的数是pair
erase() 输入的数是pair或者迭代器
find()
随机寻址
lower_bound()/upper_bound()
*/

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

/*
unordered_set/unordered_multiset unordered_map/unordered_multimap
无序的
和上面类似(增删改查的时间复杂度是O(1))
不支持lower_bound()/upper_bound(), 不支持迭代器的++/--
*/


/*
bitset, 压位

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

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

set(), 把所有位置为1
set(k, v) 把第k位设位v
reset() 把所有位变为0
flip() 把所有位取反(等价与~)
flip(k) 把第k位取反
*/


return 0;
}