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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
  set占用内存很大,尽量不使用

map<pair<int,int>,int>s;
s[{1,1}]=1;
map<array<int,2>,int>ss;
ss[{1,1}]=1;
ss.erase({1,1});
ss.count({1,1});
for(auto k : ss) {
int x=k.first[0];
int y=k.second;
cout<<x<<" "<<y;
}

vector<map<double,vector<int>>> q(n);
q[1][1].push_back(0);
map<long long,map<long long,int> > mp;
mp[1][1]=1;


vector<vector<int>> a(n, vector<int>(m)); //二维
vector<vector<vector<int>>> d(n,vector<vector<int>>(m));//三维
vector< vector < vector<int> > > b(n,vector<vector<int>>(m,vector<int>(k,1)));//初始化三维
sort(d[i][j].begin(),d[i][j].end());
d[i][j].erase(unique(d[i][j].begin(),d[i][j].end()),d[i][j].end());

vector<int>v;
auto dfs=[&](int x){
};
auto func = [] () { cout << "Hello world"; };
func(); // now call the function
// 函数名
auto st=[](int x)->bool{
};
sort(v.begin(),v.end(),[](int x,int y){
return x>y;
});



getline(cin,s);
memset(a,0,sizeof(a));//初始化数组0 -1 0x3f
memcpy(b,a,sizeof(a));//把a赋值给b 即从数组a中拷贝(sizeof a)个字节到数组b
pow (a,b);// a的b次方
ceil(x)、floor(x)、round(x) //返回x的向上,向下,四舍五入取整
log(x)、log2(x)、loga(x)//返回log(e)x,log(2)x,log(a)x;
abs(x),fabs(x)//取整
string s=to_string((int)s)//int转换string
stable_sort()、sort()//前面稳定(归并排序),后面不稳定
vector<array<int,3>>s; s.push_back({1,2,3});
for(auto k :s) {int a=x[0],b=x[1],c=x[2];}
//匿名函数
sort(a+1,a+10,[](int z,int y){
return z>y;
});
auto check=[&](int x) ->bool{
if(x>1) return 1;
return 0;
};


vector大法
// 直接声明元素类型为int的vector
vector<int> v1;
// 利用构造函数声明一个长度为5的vector,
vector<int> v2(5);
// 利用构造函数声明一个长度为5,所有值为1的vector
vector<int> v3(5, 1);
// 另一种声明方式
vector<int> v4 = {4, 5, 6, 7};
cout << v[2] << endl; // 输出
v.push_back(3); // 往尾部插入3
v.pop_back(); // 删除最后一个元素
cout << v.size() << endl;//元素个数
v.clear(); // 清空 o(1)
v.empty()//若该vector为空则返回true,否则返回false
v.front() = 1; // 将头部的元素修改为1
v.back() = 2; // 将尾部的元素修改为2
vector<vector<int>>s(n,vector<int>(m));//n*m
v2.swap(v1);//交换v1 v2
sort(v.begin(),v.end());
vector<int>w;
w.emplace_back(1);//尾部插入
w.insert(w.begin(),10);//指定位置插入10
w.insert(w.begin(),3,10);//指定位置插入3个10


find
string st="1234";
//能否找到指定字符,,如果可以则返回第一个字符下标
st.find("192",1)//从下标1开始找
if(st.find("192")==string::npos ) cout<<"NO";
else cout<<"YES";
string s=st.substr(2);//从下标2开始截取st
string s=st.substr(2,3);//从下标2(长度3)开始截取st


string s = "abcdef";
// 将s串中的下标从3开始长度为2的子串替换成"123456"
s.replace(3, 2, "123456");

// 将 s 串中从下标3开始长度为2的子串替换成 "123456" 的下标从2开始长度为3的子串
s.replace(3, 2, "123456", 2, 3); // abc345f

// 将 s 串中下标从3开始长度为1的子串替换成 5个 ’#‘
s.replace(3, 1, 5, '#');
cout << s << endl; // abc#####ef

int main() {
string str = "what are you doing now", sub;
stringstream ss1(str); // 将流初始化
while (ss1 >> sub) { // 想流一样读入到sub里面
cout << sub << endl;
}
/*
输出结果
what
are
you
doing
now
*/
str = "123 45.6";
stringstream ss2;
ss2 << str; // 像流一样读入到ss2
int x;
double y;
ss2 >> x >> y; // 像流一样读入到 x 和 y 里面
cout << x << ' ' << y; // 123 45.6
return 0;
}
stack<int>st;//栈
//stack中没有封装clear函数,固需要清空时可以考虑用pop函数暴力清空
//(一般都是声明为局部变量,用完就不要的)
queue<int>//队列
front函数和back函数//队头,队尾
priority_queue<int, vector<int>, greater<int> > heap1; // 小顶堆
priority_queue<int, vector<int>, less<int> > heap2; // 大顶堆,即默认情况
//若是自己定义的结构体则需要重写小于符号
struct pii {
int x;
// 注意比的是谁的优先级小
bool operator< (const pii& j) const { // 两个const必须加
if (this->x > j.x)
return true; // 只有当this的x比j的x要大时,
//this的优先级才比j的优先级要小,即x越大,优先级越小
return false;
}
};
priority_queue<pii> heap;

set<int> ass = {3, 4, 3, 2, 5};
ass.insert(1); // 插入一个 1
if (ass.insert(3).second == false) {
cout << "插入失败,set里面有这个元素了" << endl; // 这句话会被执行
}
ass.find(j)!=ass.end() 说明找到 否则没有
auto it=sc.lower_bound(k); //找到sc 大于等于k的下标
if(it!=sc.end()) //找到
{
sc.erase(it);
sc.insert(k);
}

if(ass.count(1))cout<<"YES";//判断有没有
ass.erase(3);//删除元素3

bitset<>

bitset<10> b1; //声明 10 位,每位都是0

bitset<10> b2(20); // 传入 unsigned long 类型值为20的参数,存放10位其二进制的值
cout << b2 << endl; // 0000010100

bitset<10> b3("1010"); // 传入二进制字符串
cout << b3 << endl; // 0000001010
//全排列
int arr[3] = {1, 2, 3};
do {
for (int i = 0; i < 3; ++i) {
cout << arr[i];
}
cout << endl;
} while (next_permutation(arr, arr + 3));

multiset<int>s;//升序
multiset<int,greater<int>>s;//降序
s.count(1);//查找
s.insert(1);//插入
s.erase(s.find(a));//删除a
*s.rbegin();//最后一个元素
*s.begin();//第一个元素

struct cmp{
bool operator() (const int &a,const int &b){
return a>b;
}
};
void solve()
{set<int>s;//从小到大
//从大到小
set<int,cmp>w;//自定义比较
set<int,greater<int>> setb;
auto it=s.find(x);
if(it!=s.end()) {//存在
}
int ik=s.count(x);//返回set中x的个数
s.begin();
s.end();
*(--w.end())==*w.rbegin()
s.clear();
s.size();
s.insert(10);
s.erase(100);//删除元素
cout<<s.count(x);
cout << "第一个大于或等于3的元素: " << *s.lower_bound(3) << endl;
cout << "第一个大于2的元素: " <<*s.upper_bound(2) << endl;
}

map
map<int, vector<int>> pos;

map<int,int>s;
for(auto it : s){
int z=it.first;
int y=it.second;}