刷题技巧

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输出不会换行,需要加上“\n”
  • 格式输出:%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
    • 字符串数组的末尾有“\0”字符作为结束标志,若用getchar读入的字符串,需要在数组尾部添加“\0”,否则会输出乱码

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():获取字符串数组中第一个“\0”前的字符个数
  • strcpy(字符串数组1,字符串数组2):将字符串数组2复制给字符串数组1,复制包括“\0”
  • strcat(字符串数组1,字符串数组2):将字符串数组2接到字符串数组1后面

vector

  • 初始化:vector name;
  • 访问:
    • 下标访问
    • 迭代器访问:vecto ::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 name;
  • 访问:
    • 只能通过迭代器访问,set ::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型

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 name;
  • 访问:front()访问队首元素,back()访问队尾元素
  • 常用函数:
    • **push()*
    • front()、back()
    • pop()
    • empty()
    • size()

priority_queue

  • 优先级队列(优先级可以由用户自己定义),队首元素的优先级最高,默认数字大的优先级高
  • 初始化:
    • priority_queue name;
    • priority_queue<typename,容器(承载底层的容器),less (greater )> name,less 表示数字大的优先级越大,而greater 表示数字小的优先级越大
    • priority_queue<typename,容器,cmp(函数)> name;优先队列中的cmp与sort中的com效果相反
  • 访问:top()访问队首元素,及优先级最高的元素
  • 常用函数:
    • push()
    • top()
    • pop()
    • empty()
    • size()

stack

  • 栈,先进后厨
  • 初始化:stack 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的元素的位置,返回指针(数组)或迭代器(容器)若不存在则返回可以插入该元素的位置(即假设存在该元素时,该元素应当在的位置)

猜你喜欢

转载自www.cnblogs.com/fangzhiyou/p/12498639.html