一、思维导图
二、STL篇
1.vector
vector--矢量向量、动态数组、不定长数组
#include<iostream>
#include<vector>
using namespace std;
int main(){
//定义了一个int类型的空数组v,数组大小为0
vector<int> v;
//定义了一个int类型的大小为10的数组,元素值默认为0
vector<int>v1(10);
//数组值全为1
vector<int>v2(10,1);
//为数组分配大小
v.resize(10);
//为数组赋值
for(int i=0;i<10;i++){
v[i]=i;
}
//输出数组元素
for(int i=0;i<10;i++){
cout<<v[i]<<" ";
}
//数组末尾添加新的元素 11
v.push_back(11);
cout<<endl;
//输出数组长度
cout<<v.size()<<endl;
//迭代器,v.begin()指向v[0],v.end()指向最后一个元素的后面一位
for(auto p=v.begin();p!=v.end();p++){
cout<<*p<<" ";
}
return 0;
}
2.set
#include <iostream>
#include <set>
using namespace std;
int main(){
set<int> s;
//插入
s.insert(2);
s.insert(1);
s.insert(3);
//set中的存储会自动排好序
for(auto p = s.begin(); p != s.end(); ++p){
cout << *p << " ";
}
//查找数据2在集合中的位置,返回值为指针
cout<<(s.find(2)!=s.end())<<endl;//返回false
cout<<(s.find(4)!=s.end())<<endl;//返回true
//删除
s.erase(1);
return 0;
}
3.map(键值对)
#include<iostream>
#include<map>
using namespace std;
int main(){
//创建map,键为string类型,值为int类型
map<string,int>m;
m["hello"]=1;
m["world"]=2;
//根据已知键访问对应的值,若不存在就返回0
cout<<"hello:"<<m["hello"]<<endl;
//遍历
for(auto p=m.begin();p!=m.end();p++){
cout<<p->first<<":"<<p->second<<endl;
}
//获取长度
cout<<"map的长度为:"<<m.size();
return 0;
}
4.stack(栈)
#include<iostream>
#include<stack>
using namespace std;
int main(){
//创建
stack<int>s;
//入栈
s.push(2);
s.push(1);
s.push(3);
//出栈
s.pop();
//访问栈顶
cout<<s.top()<<endl;
//获取长度
cout<<"该栈的长度为:"<<s.size()<<endl;
return 0;
}
5.queue(队列)
#include<iostream>
#include<queue>
using namespace std;
int main(){
//创建队列
queue<int> q;
//队尾添加元素
for(int i=0;i<10;i++){
q.push(i);
}
//获取队首队尾元素
cout<<"队首为:"<<q.front()<<endl<<"队尾为:"<<q.back()<<endl;
//出队
q.pop();
//获取队长度
cout<<"该队的长度为:"<<q.size()<<endl;
return 0;
}
6.unordered_map和unordered_set
这两个其实就是不会排序的 map(键值对)和set(集合),它们省去了排序的过程,如果刷题的时候超时了,可以使用这两个。
#include<iostream>
#include<unordered_map>
#include<unordered_set>
using namespace std;
int main(){
unorder_map<string,int>m;
unorder_set<int> s;
//存储没有顺序
s.insert(1);
s.insert(2);
s.insert(3);
m["hello"]=1;
m["world"]=2;
m["a"]=3;
m["ni"]=4;
m["hao"]=5;
for(auto p=s.begin();p!=s.end();p++){
cout<<*p<<endl;
}
for(auto p=m.begin();p!=m.end();p++){
cout<<p->first" "<<p->second<<endl;
}
return 0;
}
7.位运算bitset
#include<iostream>
#include<bitset>
using namespace std;
int main(){
//表示5个二进制位,初始化为0
bitset<5>b;
//用六位二进制位表示19 10011
bitset<6>b1(19);
//s为字符串,在字符串前面补0凑齐位数
string s="1011";
bitset<8>b2(s);
// 从字符串s的第3位字符截取5个字符
bitset<8>b3(s,3,5);
cout<<b<<endl<<b1<<endl<<b2<<endl;
//最低位为b[0]
// for(int i=0;i<b.size();b++){
// cout<<b[i]<<" ";
// }
cout<<"是否有1:"<<b1.any()<<endl;
cout<<"是否不存在1:"<<b1.none()<<endl;
cout<<"1的个数:"<<b1.count()<<endl;
cout<<"b1中元素个数:"<<b1.size()<<endl;
cout<<"下标为i的元素是不是1"<<b1.test(0)<<endl;
//所有位归零
b1.reset();
//指定位归零
b1.reset(2);
//所有位取反
b1.flip();
//指定位取反
b1.flip(3);
//转换为unsigned_long类型
unsigned_long a=b1.to_ulong();
return 0;
}
8.sort函数与cmp函数
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct stu{
string name;
int age;
};
bool cmp(stu a,stu b){
//年龄不同,从小到大
if(a.age!=b.age)
return a.age<b.age;
//年龄相同,按照名字ascii值从小到大
else
return a.name<b.name;
}
int main(){
stu s[3];
for(int i=0;i<3;i++){
cin>>s[i].name>>s[i].age;
}
sort(s,s+3,cmp);
for(int i=0;i<3;i++){
cout<<s[i].name<<" "<<s[i].age<<endl;
}
return 0;
}