1.输入
scanf
- %c:读入单个字符,可读入空格以及换行符
- %s:读入时以空格以及换行符为结束标志
- %[](字符串集合):
- %[0-9]表示只读入'0'到'9'之间的字符
- %[a-zA-Z]表示只读入字母
- %[^a-z]就表示读入小写字母之外的字符
- %n[^=]读入 = 号前的至多n 个字符
getline(cin,s)
- 将一整行作为字符串读入,以换行符作为结束标志
- 使用前要将缓冲区的换行符用其他输入函数读出
getchar()
- 入单个字符,可读入空格以及换行符
cin
- cin.getline(str),将字符串读入到字符串数组中
2.输出
printf
- double类型的输出格式为%f
- printf输出不会换行,需要加上“ ”
- 格式输出:%md(对不足m位的整型进行右对齐输出,高位用空格补齐)
- 格式输出:%0md(对不足m位的整型进行右对齐输出,高位用0补齐)
- 格式输出:%.mf(让浮点数保留m位小数输出,保留规则为“四舍六入五成双”)
cout
- 格式输出:left、right(左对齐、右对齐)
- 格式输出:(
)setfill(int ch)(设置填充字符为ch) - 格式输出:(
)setw(int w)(设置域的宽度) - 格式输出:(
)setprecision(int p)(设置数值的精度(四舍五入))
3.变量类型
- 对于浮点型,一般选用double类型
- 浮点数的比较:
- 定义const double eps=10^(-8);
- 通过浮点数a和浮点数b做差,然后和eps进行比较,做出大小判断
- 圆周率定义:const double Pi = acos(-1);
4.数据结构
数组
- 初始化:
- 数组大小必须是整数常量,不可以是变量
- 可以用{}对数组符初值,数组剩余部分默认值初始化
- 若数组需要的空间较大,可以在主函数外部定义,主函数外部允许申请的空间大,来自静态存储区
- memset(数组名,值,sizeof(数组名)):对数组每一个元素赋值,建议赋值0或者-1
- 字符串数组的末尾有“ ”字符作为结束标志,若用getchar读入的字符串,需要在数组尾部添加“ ”,否则会输出乱码
5.常用包
math
-
fabs(double x):对double型变量取绝对值
-
floor(double x)和ceil(double x):分别对double型变量向上取整和向下取整
-
pow(double r,double p):r和p都是double型,返回r^p
-
sqrt(double x):返回double类型的算术平方根
-
log(double x):返回double类型变量的以自然对数为底的对数
-
sin(double x)、cos(double x)和tan(double x):返回double型变量的正弦值、余弦值和正切值
-
asin(double x)、acos(double x)和atan(double x):返回double型变量的反正弦值、反余弦值和反正切值
-
round(double x):对输入double型变量x四舍五入,返回double型
string.h
- strlen():获取字符串数组中第一个“ ”前的字符个数
- strcpy(字符串数组1,字符串数组2):将字符串数组2复制给字符串数组1,复制包括“ ”
- strcat(字符串数组1,字符串数组2):将字符串数组2接到字符串数组1后面
vector
- 初始化:vector<typename> name;
- 访问:
- 下标访问
- 迭代器访问:vecto<typename>::iterator it;
- vi[i] 等价于 (vi.begin() + i)
- 支持vi.begin()+number;
- 左闭右开,end()作为迭代器结束标志,不存储任何元素
- 常用函数:
- push_back()
- pop_back()
- size()
- clear()
- insert(it,x):向迭代器it处添加一个元素x
- erase():
- erase(it)删除迭代器it处的单个元素
- erase(first,last)删除迭代器[first,end)内的所有元素
set
- 内部自动有序且不含重复元素的容器
- 初始化:set<typename> name;
- 访问:
- 只能通过迭代器访问,set<typename>::iterator it,不支持s.begin()+number
- 可以使用s.rbegin访问最后一个元素
- 常用函数:
- inset():insert(x)将x插入到set容器中
- find():find(value)返回对应值为value的迭代器,若无则返回s.end()
- erase():
- erase(it)删除迭代器it处的单个元素
- erase(value)删除值为value的单个元素
- size()
- clear()
- 扩展:unorder_set为不排序的无重复元素的容器
string
- 初始化:string str ; string str="abcd" ;只能通过cin和cout输入输出
- 访问:
- 下标访问:下标访问的元素的类型为char
- 迭代器访问:string::iterator it;
- 支持str.begin()+number;
- str[i] 等价于 (str.begin() + i)
- 左闭右开,end()作为迭代器结束标志,不存储任何元素
- 常用函数:
- 运算符+
- 比较运算符
- length()/size()
- insert():
- insert(pos,string)在pos位置插入字符串string;
- insert(it,it2,it3)将串[it2,it3)插入到原字符串迭代器it的位置上
- insert(pos,n,c)在pos位置插入n个字符c
- erase():
- str.erase(it)删除迭代器it处的单个元素;
- str.erase(first,last)删除区间[first,last)的元素
- clear()
- substr():substr(pos,len)返回从迭代器pos位开始、长度为len的子串
- find():
- str.find(str2),返回str2在str第一次出现的位置,否则返回string::npos;
- str.find(str2,pos),返回从pos位开始的str2在str第一次出现的位置,否则返回string::npos
- replace():
- str.replace(pos,len,str2)把str从pos位开始、长度为len的子串替换为str2;
- str.replace(it1,it2,str2)把str的迭代器[it1,it2)范围内的子串替换为str2
- stoi(str):将字符串转换为int型
- stold(str):将字符串转换为double型
- isalnum() 如果参数是字母数字,即字母或者数字,函数返回true
- isalpha() 如果参数是字母,函数返回true
- iscntrl() 如果参数是控制字符,函数返回true
- isdigit() 如果参数是数字(0-9),函数返回true
- isgraph() 如果参数是除空格之外的打印字符,函数返回true
- islower() 如果参数是小写字母,函数返回true
- isprint() 如果参数是打印字符(包括空格),函数返回true
- ispunct() 如果参数是标点符号,函数返回true
- isspace() 如果参数是标准空白字符,如空格、换行符、水平或垂直制表符,函数返回true
- isupper() 如果参数是大写字母,函数返回true
- isxdigit() 如果参数是十六进制数字,即0-9、a-f、A-F,函数返回true
- tolower() 如果参数是大写字符,返回其小写,否则返回该参数
- toupper() 如果参数是小写字符,返回其大写,否则返回该参数
map
- 映射,可以将任何基本类型映射到任何基本类型,会依据键从小到大的顺序自动排序
- 初始化:map<typename1,typename2> mp;
- 访问:
- 下标访问:map中的键是唯一的
- 迭代器访问:map<typename1,typename2>::iterator it;
- it->first访问键,it->second访问值
- 常用函数:
- find():find(key)返回键为key的映射的迭代器
- erase():
- mp.erase(it)删除迭代器it的元素;
- mp.erase(key)删除键为key的映射
- mp.erase(first,end)删除[first,last)区间的元素
- size()
- clear()
- 扩展:unorde_map为无序映射
queue
- 队列,先进先出,使用时要注意判空
- 初始化:queue<typename> name;
- 访问:front()访问队首元素,back()访问队尾元素
- 常用函数:
- push()
- front()、back()
- pop()
- empty()
- size()
priority_queue
- 优先级队列(优先级可以由用户自己定义),队首元素的优先级最高,默认数字大的优先级高
- 初始化:
- priority_queue<typename> name;
- priority_queue<typename,容器(承载底层的容器),less<tyename>(greater<typename>)> name,less<typename>表示数字大的优先级越大,而greater<typename>表示数字小的优先级越大
- priority_queue<typename,容器,cmp(函数)> name;优先队列中的cmp与sort中的com效果相反
- 访问:top()访问队首元素,及优先级最高的元素
- 常用函数:
- push()
- top()
- pop()
- empty()
- size()
stack
- 栈,先进后厨
- 初始化:stack<typename> name;
- 访问:只能通过top()来访问栈顶元素
- 常用函数:
- push()
- top()
- pop()
- empty()
- size()
pair
- 对,两个元素绑在一起
- 初始化:pair<typename1,typename2> name;
- 临时构建:
- pair<typename1,typename2>(typename1实例,typename2实例)
- make_pair(typename1实例,typename2实例)
- 访问:p.first访问第一个元素,p.second访问第二个元素
- 常用函数:
- 比较操作数
- 扩展:代替二元结构体;作为map键值插入
algorihm
- max()、min()、abs(x(x为整数))
- swap()
- reverse()
- fill(first,last,num)
- 初始化二维数组: fill(e[0], e[0] + row * col , num);
- sort(first,last,cmp)
- lower_bound(first,last,val):寻找范围[first,last)第一个值大于等于val的元素的位置,返回指针(数组)或迭代器(容器),若不存在则返回可以插入该元素的位置(即假设存在该元素时,该元素应当在的位置)
- upper_bound(first,last,val):寻找范围[first,last)第一个值大于val的元素的位置,返回指针(数组)或迭代器(容器)若不存在则返回可以插入该元素的位置(即假设存在该元素时,该元素应当在的位置)