• 刷题技巧


    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的元素的位置,返回指针(数组)或迭代器(容器)若不存在则返回可以插入该元素的位置(即假设存在该元素时,该元素应当在的位置)
  • 相关阅读:
    iOS IM开发建议(三)添加一个自定义键盘
    iOS IM开发建议(二)计算TableViewCell的高度:图文混排
    iOS IM开发建议(一)App框架设计
    iOS IM开发准备工作(五)iOS中的struct怎么处理
    关东升的iOS实战系列图书 《iOS实战:入门与提高卷(Swift版)》已经上市
    关东升的《从零开始学Swift》3月9日已经上架
    《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射
    《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之Swift与Objective-C API映射
    《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言
    《从零开始学Swift》学习笔记(Day 10)——运算符是“ +、-、*、/ ”吗?
  • 原文地址:https://www.cnblogs.com/fangzhiyou/p/12498639.html
Copyright © 2020-2023  润新知