刷题-语言技巧

1.输入

scanf

  • %c:读入单个字符,可读入空格以及换行符
  • %s:读入时以空格以及换行符为结束标志
  • %[](字符串集合):
    • %[0-9]表示只读入'0'到'9'之间的字符
    • %[a-zA-Z]表示只读入字母
    • %[^a-z]就表示读入小写字母之外的字符
    • %n[^=]读入 = 号前的至多n 个字符

getline(cin,s)

  • 将一整行作为字符串读入,以换行符作为结束标志
  • 使用前要将缓冲区的换行符用其他输入函数读出

getchar()

  • 入单个字符,可读入空格以及换行符

cin

  • cin.getline(str),将字符串读入到字符串数组中
  • 提高读写效率
    • 可通过ios::sync_with_stdio(false);来解除与C的输出流的绑定,从而提高读写效率
    • 可通过cin.tie(0)解除cin与cout的绑定,从而提高读写效率

2.输出

printf

  • double类型的输出格式为%f
  • printf输出不会换行,需要加上“\n”
  • 格式输出:%-md(对不足m位的整型进行左对齐输出,高位用空格补齐)
  • 格式输出:%md(对不足m位的整型进行右对齐输出,高位用空格补齐)
  • 格式输出:%0md(对不足m位的整型进行右对齐输出,高位用0补齐)
  • 格式输出:%.mf(让浮点数保留m位小数输出,保留规则为“四舍六入五成双”)

cout

  • 格式输出:left、right(左对齐、右对齐)
  • 格式输出:()setfill(int ch)(设置填充字符为ch)
  • 格式输出:()setw(int w)(设置域的宽度)
  • 格式输出:()setprecision(int p)(设置数值的精度(四舍五入))

3.变量类型

  • C++中常量INT_MAX和INT_MIN分别表示最大、最小整数
  • 对于浮点型,一般选用double类型
  • 浮点数的比较:
    • 定义const double eps=10^(-8);
    • 通过浮点数a和浮点数b做差,然后和eps进行比较,做出大小判断
  • 圆周率定义:const double Pi = acos(-1);

4.数据结构

数组

  • 初始化:
    • 数组大小必须是整数常量,不可以是变量
    • 可以用{}对数组符初值,数组剩余部分默认值初始化
    • 若数组需要的空间较大,可以在主函数外部定义,主函数外部允许申请的空间大,来自静态存储区
    • (指针类型)malloc(sizeof(type)*n)进行空间的申请,注意最后需要进行空间的释放
    • fill(数组名,数组名+长度,值):按照单元赋值,可以赋值任何值
    • memset(数组名,值,sizeof(数组名)):对数组每一个元素赋值,一般用来对char数组进行赋值,建议int数组赋值0或者-1(memset函数按字节填充)
    • 字符串数组的末尾有“\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后面
  • 包含memset(变量名,值,sizeof(变量名))函数

bitset

  • 定义:相当于一个二进制的数组,并且可以直接用01串赋值,也可以直接进行位运算
  • 初始化:bitset bitset(s/n);
  • 常用函数:
    • size() 返回 std::bitset 的长度
    • count() 返回 std::bitset 中值为 1 的位的数量
    • any() 返回 std::bitset 中是否存在值为 1 的位
    • none() 返回 std::bitset 中是否所有位都是 0
    • all() 返回 std::bitset 中是否所有位都是 1
    • test(pos) 返回 std::bitset 中位于 pos 位置的值
    • set(pos) 将 std::bitset 中位于 pos 位置的值设为 1
    • reset(pos) 将 std::bitset 中位于 pos 位置的值设为 0
    • flip(pos) 将 std::bitset 中位于 pos 位置的值取反
    • to_ulong() 返回 std::bitset 转换成的无符号整数值
    • to_ullong() 返回 std::bitset 转换成的无符号长整数值

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()
  • 扩展:unordered_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
    • to_string():将数字常量转换为字符串
    • 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的映射的迭代器,若没找到则返回mp.end()
    • insert():插入元素,不会覆盖已有元素
    • erase():
      • mp.erase(it)删除迭代器it的元素;
      • mp.erase(key)删除键为key的映射
      • mp.erase(first,end)删除[first,last)区间的元素
    • count():如果容器具有与键 k 关联的值,则返回 1,否则返回 0。
    • size()
    • clear()
  • 扩展:unordered_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为整数))
  • accumulate(v.begin(), v.end(), init)(头文件
  • max_element(iterator start, iterator end):返回向量最大值对应的迭代器,若范围中有多个元素等价于最大元素,则返回指向首个这种元素的迭代器。若范围为空则返回 last 。
  • 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的元素的位置,返回指针(数组)或迭代器(容器)若不存在则返回可以插入该元素的位置(即假设存在该元素时,该元素应当在的位置)
  • 不修改内容的序列操作
    • count():返回值等价于给定值的元素的个数
    • cout_if():返回值满足于给定条件的元素的个数
    • find((InputIterator first, InputIterator last, const T& val):返回第一个值等于给定值的元素,如果查找失败,则该迭代器的指向和 last 相同。
    • find_if():返回第一个值满足给定条件的元素
    • for_each():对范围内的每一个元素调用指定函数
  • 修改内容的序列操作
    • remove():将一个范围中值等价于给定值的元素删除
    • remove_if():将一个范围中值满足给定条件的元素删除
    • replace():将一个范围中值等价于给定值的元素赋值为新的值
    • replace_if():将一个范围中值满足给定条件的元素赋值为新值
    • unique():删除指定范围中的所有连续重复元素,仅仅留下每组等值元素中的第一个元素
posted @ 2020-03-15 23:10  方知有  阅读(348)  评论(0编辑  收藏  举报