• 为了备战NOIP2016复习语法和stl库一上午撸了15页


    比较重要:

    1.   位运算符:

    <1>&(按位与):当两个数的二进制位同为1的时候,结果位才为1.否则为0.(简记:and同一为一,不同一为0.)

    <2>|(按位或):当两个数的二进制有一个为1的时候,结果位为1.否则为0.(简记:or只有有一就是一).

    <3>^(按位异或):当两个数二进制位数不相同时,结果位才为1.否则为0.(简记:xor不同才是1相同才为0).

    <4>~(取反):二进制的位相反,当为1时为0,为0时为1.(简记:1为0,0为1)。

    <5><<(左移):把左面移动几位,右面用0补上几位。EX:<<4为向左移4位.(相当于称2,速度快)。

    <6>>>(右移):跟<5>相反相当于除2.

    2.  变量范围

     

    3.  ASCII

     

     

    4.  转义字符

     

    5.  强制转换

    老式:  (类型名)(表达式);

    新式:  static_case<类型名>(表达式);

    不同:反正两个差不多,老式出错率大了点而已。比赛推荐老式。新式写起来费时间。

    6.输入输出

    说实话我写这个是完全为了学点c的,熟悉一下。毕竟scanf比cin流输入快。还有另外一种比较开挂的读入。代码如下:

    <1>cin>>变量;

       cout<<变量<<endl;

    <2>scanf(%d %d,&a,&b);

      输入a,b值。

       scanf(%4d,&a);

      输入a的值的位数是输入的前4个。

      scanf(%s,st);

    输入st字符串,遇到空格结束。

     scanf(%*d,a);

    输入的不给变量a;

     scanf(%d,%d,%d&a,&b,&c);

    输入abc的时候要输入逗号。

    d, i   u                用于int类型、无符号输入(u)

    ld                        用于long int 输入

    hd                       用于 short 输入

    fe                      用于输入实数

    s                         用于输入字符串

    c                         用于输入字符串

    x o                  分别是十六进制,八进制输入

    <3>printf(没有&地址符)

    printf(%d,a);

    di(u)                       用于int(无符号)输出

    xo                        用于十六进制、八进制输出

    cs                         用于单字符、字符串输出

    f                         用于小数输出单双精度浮点数

    ld                            用于longlong类型输出

    e                             用指数输出

    g                             自动选%f%e中宽度小的输出

    %md%-md、%0md   输出m位、左对齐输出m位、位数不足用0补

    %mld类似啦就是输出longlong类型用法中间加个l好了)

    %m.nf%-m.nf        输出浮点数共有m位(含小数),n位小数,-用法和楼上一样

    ms                       指定m位宽度输出字符串s

    m.ns                     输出m位字符长度,其中字符最多占n位

    (类似也有-ms、-m.ns用法跟楼上的楼上一样啦~)

    <4>开挂的读入读写(里面三种读入读写时间cin>scanf>scan())

    #include<iostream>

    #include<cstdio>

    using namespace std;

    int scan() 

        long long res = 0, ch, flag = 0; 

        if((ch = getchar()) == '-')           

            flag = 1; 

        else if(ch >= '0' && ch <= '9')         

            res = ch - '0'; 

        while((ch = getchar()) >= '0' && ch <= '9' ) 

            res = res * 10 + ch - '0'; 

        return flag ? -res : res; 

    int main ()

    {

         int x,y, z;

         x=scan();

         cin>>y;

         scanf("%d",&z);

         cout<<x<<" "<<y<<" ";

         printf("%d",z);

         return 0;

    }

    <5>总结:cin流的头文件是<iostream>,它是属于c++范畴的,c++专用。scanf、printf是<cstdio>,c语言的。时间相比看<4>。竞赛用scanf多,反正我平常用cin。没错鄙人就是这么特殊。(其实就是懒,当然竞赛我也会考虑用的)。

    6.  文件输入输出

    一个特别重要的,因为如果你不会这个,那么你在牛逼,也是0分。重点掌握。

    <1>freopen

    #include<cstdio>

    #include<iostream>

    using namespace std;

    int main()

    {

         freopen("xx.in","r",stdin);

         freopen("xx.out","w",stdout);

         //add your 代码;

         fclose(stdin)

         fclose(stdout);

    }

    平时用cena测评基本都用这种文件输入输出。但是有些比赛不准用重定向。所以介绍下一种。

    <2>fstream:

    #include<iostream>

    #include<fstream>

    using namespace std;

    int temp;

    int main()

    {

         ifstream fin("xx.in");

         ofstream fout("xx.out");

         fin>>temp;

         fout<<temp<<endl;

         fin.close();

         fout.close();

    }

    <3>这两种第一种用起来比较舒服,因为写上这一部分代码,任何输入输出都按正常的写代码。而第二种属于c++的反正写起来比较恶心。如果也是想往常一样写代码。那就用#define fin cin    #define fout cout 放在头文件下面几行行了。不过不能用scanf等输入毕竟这个输入c++输入流里面的。

    7.  结构体

    这个东西可以这么理解,它就是一个虚拟世界的物品。因为一个物品例如正方形,在现实世界中是一个有长度,有宽度,有体积,有面积的物体。而在计算机中如何表示呢,你不可能那个实体塞进去。塞进去就可以上天了。我们就可以把正方形的长宽高体积面积变成数输进去。然后储存在一个东西里。这个东西就叫结构体。代码:

    #include<iostream>

    using namespace std;

    struct  data

    {

      int s;            //定义面积

      int l;            //定义长度

      int w;            //定义宽度

      int h;            //定义高度

      int v;            //定义体积

    }cube;

    int main()

    {

      cin>>cube.s>>cube.l>>cube.w>>cube.h>>cube.v;

      cout<<cube.s<<" "<<cube.l<<" "<<cube.w<<" "<<cube.h<<" "<<cube.v<<endl;

      return 0;

    }

    调用正方体的数据就类似定义。如果要防止某些数据改变就可以用const 类型名 变量名 ;来定义。如果要多次运用到这个结构体可以用data 变量1,变量2;等方式定义。Struct结构体跟c++类相类似。竞赛用的比较常见。应重点掌握。

    8.  c++STL函数

    一个特别好用的函数库。多掌握几个,写代码跟过家家是的。应该注意,stl函数很耗时间所以谨慎使用。曾经做过洛谷的快排模板的一道题,用sort和自己写快排作对比,快排最慢254ms而sort( )最慢568ms。谁快谁慢自己心理有数好了。不要以为差314ms很少,告诉你有时候你慢1ms,就给你tle。还是能节省就节省。

    <1>algorithm

    max()min()                           返回两个值中最大、最小值

    next_permutation()                      把数组进行下一次的全排列

    prev_permutation()                      把数组进行上一次的全排列

    patition()                   输入的函数把计算为true的值放在false前面

    sort()                                   从小到大排列一个数组的数

    unique()                                清除数组里全部重复的数(不是真正的删除,不信可以自己动手写一下)

    unique()使用代码:

    #include<iostream>

    #include<algorithm>

    using namespace std;

    int a[1001],i;

    int main()

    { while(cin>>a[i]) i++;

       int m=unique(a,a+i)-a;

      for(int j=0;j<=m;j++)

          cout<<a[j]<<" ";

      return 0;}

    sort()+自己写的cmp()实现从大到小排列:

    #include<iostream>

    #include<algorithm>

    using namespace std;

    int a[1001],i;

    int cmp(const int &a,const int &b) {return a>b;}

    int main()

    {while(cin>>a[i]) i++;

         sort(a,a+i,cmp);

         for(int j=0;j<i;j++)

             cout<<a[j]<<" ";

         return 0;}

    <2>string

    string s1;                              定义一个string类型的字符串

    string s1(s2);                           定义s1内容为s2

    string s1(dingyi);                    定义s1内容为dingyi

    string s1(n,c);                      定义有n个c字符为内容

    cin>>s1会忽略字符前的空格等但再次读到空格就会停止,可记为读单词。

    getline(cin,s1);                    这个输入什么读什么,即读句子。

    s3=s1+add”+s2;                s3内容为s1加上add加上s2内容

    s1.empty()                        如果s1无字符返回true

    s1.insert(n,s2)                  在下标是n的元素前面插入s2

    s1.substr(n,len)            返回一个字符串,包含从下标n开始len个字符

    s1.erase(n,len)              删除从下标为n开始len个字符

    s1.replace(n,len,s2)         从下标为n开始len个字符用s2代替,如果s2长度大于代替长度,那么后面内容后移它们的差值

    s1.find(s2,n)             从下标n开始从前查找s2的出现的第一次位置,没找到返回string::nops

    s1.rfind(s2,n)    与楼上类似不过是从后开始查找,返回值也是nops

    s1. find_ frist_of (s2,n) n下标开始,开始正向查找s2中的某一个字符,如果查到返回第一次出现的值,否则返回sting::nops

    s1. find _ last_of (s2,n)与楼上一样。区别为逆向查找

    s1. find_ frist_not_of (s2,n)n下标开始,正向查找s2中的某一字符,只要出现返回string::nops

    s1. find_ last_not_of (s2,n)跟楼上一样,逆向查找。

    <3>FIFO队列和优先队列

    queue<类型名>变量名;

    priority_queue<类型名>变量名;           定义优先队列

    q.emqty()               如果队列为空返回true否则返回false

    q.size()                  返回队列个数

    q.pop()                  删除队首元素,不返回值

    q.front()                 返回队首值,不删除值

    q.back()                  返回队尾的值,不删除值

    q.top()                   优先队列最高优先值

    q.push()                  在队尾加入一个新元素

    <4>vector

    vector<类型名>变量名;

    v.back()      // 传回最后一个数据,不检查这个数据是否存在。
    v.begin()     // 传回迭代器中的第一个数据地址。
    v.capacity()  // 返回容器中数据个数。
    v.clear()     // 移除容器中所有数据。
    v.empty()     // 判断容器是否为空。
    v.end()       // 指向迭代器中末端元素的下一个,指向一个不存在元素。
    v.erase(pos)  // 删除pos位置的数据,传回下一个数据的位置。
    v.erase(beg,end)  //删除[beg,end)区间的数据,传回下一个数据的位置。
    v.front()     // 传回第一个数据。

    v.pop_back()       // 删除最后一个数据。
    v.push_back(elem)  // 在尾部加入一个数据。

    v.resize(num)      // 重新指定队列的长度。
    v.reserve()        // 保留适当的容量。

    v.size()           // 返回容器中实际数据的个数。
    v1.swap(v2) swap(v1,v2)        // v1和v2元素互换。同上操作。

    <5>map容器

    map<类型1,类型2>变量名;

    ma.begin()返回map第一个元素的指针

    ma.end()返回最后一个元素的指针

    ma.size()返回map的元素个数

    ma.count(n)如果n存在map中返回存在的个数,没有返回0;

    ma.clean()清空map

    ma.lower_bound()返回键值大于等于给定元素的第一个位置

    <6>cmath

    abs();整数绝对值

    ceil();向上取整

    fabs();浮点数绝对值

    floor();向下取整

    exp(n);en次方

    log(n);logn

    log10();类似以10为底

    pow(xy);x的y次方

    sqrt(x);x的开方

    cos(); sin();tan(); 三角函数值

    cosh();sinh();tanh();双曲线三角函数值

    acos();asin();atan();反三角函数值

    <7> iomanip

    setprecision(x)输出x位(fixed前面必须加这个)

    setw(n)输出的字符宽度是n位

    setfill(ch)当字符宽度大于输出宽度用ch填写

    <8>iostream

    fixed用固定的输出浮点数

    scientific 用科学计数法输出

    defaulfloat 恢复默认的浮点数表示方法

    left左对齐

    right右对齐

    internal填充字符在整数内部或者浮点数内部

    <9>locale cctype

    isupper()测试是否为大写字母

    islower() 测试是否为小写字母

    isalpha() 测试是否为大小字母

    isdigit() 测试是否为0~9数字

    isxdigit() 测试是否为十进制,八进制,十六进制数字

    isalnum() 测试是否为字母或者数字

    isspace() 测试是否为空格啥的。。。

    iscntrl() 测试是否为控制符

    isprint() 测试是否为打印字符

    isgraph() 测试是否为图形字符

    ispunct() 测试是否为标点包括空格

    tolower()大写转小写

    toupper()小写转大写

    <10>cstring

    memeset(数组名,数值n,sizeof(数组名) );把数组所有元素换成数值n

    strlwr()大写转小写;

    strupr()小写转大写

    strlen()计算字符串长度

  • 相关阅读:
    [PHP]算法-归并排序的PHP实现
    [PHP] 数据结构-二叉树的创建PHP实现
    [PHP] 数据结构-循环链表的PHP实现
    [PHP] 数据结构-链表创建-插入-删除-查找的PHP实现
    [PHP] 算法-两个n位的二进制整数相加问题PHP实现
    [PHP] 数据结构-线性表的顺序存储结构PHP实现
    [日常] 链表-头结点和头指针的区别
    [日常] C语言中指针变量
    [日常] 算法-单链表的创建-尾插法
    [日常] 算法-单链表的创建
  • 原文地址:https://www.cnblogs.com/srpihot/p/6305456.html
Copyright © 2020-2023  润新知