1. 初始化
//数组
int a[10]={1}//第一个元素是1,其余全是0
int a[]={1,2,3,4,5}//可以不指定初始长度
int a[2][5]={{1,2,3,4,5},{6,7,8,9,10}}//初始化二维数组
int *a = (int*)malloc(sizeof(int)*10)//动态分配空间
int *a = new int(10)//动态分配空间
//运算符重载
struct TreeNode {
TreeNode& operator+=(const TreeNode& node){
return *this;
}
}
typedef pair<int,int> pii;//简化
//vector容器(动态数组)
vector<int> a(10)//定义十个整型元素向量
vector<int> a(10,1)//十个整型赋初值1
vector<int> a; a.assign(10,1)//十个整型赋初值1
vector<int> a(b)//b复制给a
vector<int> a(b,b+3)//b数组中0~2个元素复制给a
vector<int> a(b.begin(),b.begin()+3)//b向量中0~2个元素复制给a
vector<vector<int>> vec(N,vector<int>(M,value))
//N行M列初值为value的二维向量
//string字符串
string str = "hello"
string str("hello")
string str = str0
string str(str0)
string str(10,'h')//str="hhhhhhhhhh"
string str = string(10,'h')
string str(str0,6)//str0从第6个字符开始拷贝
string str(str0,0,5)//str0拷贝0~5个字符
2. 容器/数据结构用法
//vector容器
vec.push_back(elem)//尾部加入元素
vec.pop_back()//删除最后一格元素
vec.front()//返回第一个元素
vec.back()//返回最后一格元素
vec.size()//返回元素个数
vec.empty()//判断容器是否为空
vec[i]//返回第i个元素当且仅当其存在
vec.resize(length)//初始化大小
vec.clear()//清空
//list容器类似
//map、unordered_map
map<int,int> m//(键,值)
m[key] = value//插入对(可覆盖)
m.erase()//通过key或迭代器删除
//遍历红黑树
for(auto it = v1.begin(); it != v1.end(); it++)
it->first,it->second;
//优先队列(默认大根堆)priority_queue
大顶堆 priority_queue <int,vector<int>,less<int> >
小顶堆 priority_queue <int,vector<int>,greater<int> >
priority_queue< Node, vector<Node>, cmp> q;//自定义比较方式
struct cmp
{
bool operator () (const Node &a, const Node &b) {return a.weight < b.weight;}
};
//stack、queue
push(elem)//向队尾插入元素
pop()//删除队首元素
//set
insert(elem)//向集合插入元素
erase(elem)删除元素
//deque(双端队列)
push_back(elem)// 向队尾插入元素
pop_back()//删除队尾元素
push_front(elem)//向队首插入元素
pop_front()//删除队首元素
//string字符串
str.size()//获取长度
str[i],str.at(i)//返回指定位置字符
str.insert(pos,s)//指定位置插入字符串
str.replace()//替换
str.append(4,'h')//str尾部插入"hhhh"
str.append(str0) // str尾部插入str0
str.append(str0,4,6)//将str0第4个元素开始的6个字符插入str尾部
str.assign()//赋值
str.erase(0)//删除第一个字符
str.erase(0,1)//删除第一个字符
str.erase(str.end()-3, str.end())//删除最后三个字符
str.substr(1)//截取下标1以后字符串
str.substr(0,3)//从下标0开始截取3个字符
str.find(str0)//匹配子串,返回位置
str.push_back()
str.pop_bacK()
3. 常用函数和操作
//vector排序
sort(s.begin(),s.end(),cmp)
sort(nums.begin(),nums.end(),greater<int>())//逆序排
//按第二个元素升序排
sort(nums.begin(),nums.end(),[](vector<int>& n1, vector<int>& n2){//注意没有函数名cmp,用[]
return n1[1]<n2[1]
});
//vecotr操作,左闭右开
翻转:reverse(nums.begin(),nums.end())
求和: accumulate(nums.begin(),nums.end(),0)
去重(先排序): unique(nums.begin(),nums.end())
二分查找:lower_bound()//返回第一个大于等于某元素的位置
二分查找:upper_bound()//返回第一个大于某元素的位置
//字符串转数字
atoi(s1.c_str())
//数字转字符串
to_string(a)
//取整
floor()向下取整、ceil()向上取整、round()四舍五入