• C++ 一些小技巧


    部分内容来自网上~

    头文件:

    /*
    Problem:
    Status :
    By WF,
    */
    #include "algorithm"
    #include "iostream"
    #include "cstring"
    #include "cstdio"
    #include "string"
    #include "stack"
    #include "cmath"
    #include "queue"
    #include "set"
    #include "map"
    
    #define lson l , m , rt << 1
    #define rson m + 1 , r , rt << 1 | 1
    
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    
    const int inf=0x3f3f3f3f;
    const int maxn=1e6+5;
    
    //从右开始顺时针
    int dir4[4][2]={0,1,1,0,0,-1,-1,0};
    int dir8[8][2]={0,1,1,1,1,0,1,-1,0,-1,-1,-1,-1,0,-1,1};
    
    int main()
    {
        //freopen("in.txt","r",stdin);
    
        return 0;
    }
    

      

    输入输出:

    printf输出float和double都可以用%f,double还可以用%lf。
    scanf输入float用%lf,double输入用%lf,不能混用。
    long long 用%lld。
    
    printf("%d
    ",i>>1 );
    printf("%10.2f
    ",d );//右对齐,占10位字符,保留2位小数。
    printf("%-10.2f
    ",d );//左对齐,占10位字符,保留2位小数。
    
    printf("%s
    ",s );//输出字符串
    fprintf(stderr, "%s
    ", );//输出到文件
    sprintf(s,"%d%d",a,b);//输出到字符串s中
    
    sscanf(s,"%d:%d:%d",&h,&m,&s)//从s(例如s=“12:59:59”)中读取h,m,s。
    
    读取一行(包括空格)(注意使用前别忘了用getchar()吸收回车符):
    fgets(s,sizeof s,stdin);
    gets(s);//有缓冲区溢出危险
    

      

    自定义STL优先队列的优先级:

    //定义结构,使用运算符重载,自定义优先级1  
    struct cmp1{  
        bool operator ()(int &a,int &b){  
            return a>b;//最小值优先  
        }  
    };  
    struct cmp2{  
        bool operator ()(int &a,int &b){  
            return a<b;//最大值优先  
        }  
    };  
    //定义结构,使用运算符重载,自定义优先级2  
    struct number1{  
        int x;  
        bool operator < (const number1 &a) const {  
            return x>a.x;//最小值优先  
        }  
    };  
    struct number2{  
        int x;  
        bool operator < (const number2 &a) const {  
            return x<a.x;//最大值优先  
        }  
    };  
    
    
    priority_queue<int>que;//采用默认优先级构造队列。最大值优先
    
    priority_queue<int,vector<int>,cmp1>que1;//最小值优先
    priority_queue<int,vector<int>,cmp2>que2;//最大值优先
    
    priority_queue<int,vector<int>,greater<int> >que3;//最小值优先。注意“> >”的空格。
    priority_queue<int,vector<int>,less<int> >que4;//最大值优先
    
    priority_queue<number1>que5;
    priority_queue<number2>que6;
    

      

    string流的用法(以Hdu 2072为例):

    //题目大意:输入一行英文句子,输出共有多少不同的单词。
    #include <sstream>
     
    set<string>s;
    string row,word;
    while(getline(cin,row) && row!="#" ){
    s.clear();
        stringstream str_cin(row);
        while(str_cin>>word){
            s.insert(word);
        }
        cout<<s.size()<<endl;
    }
    

     

    lower_bound & upper_bound:

    C/C++ char数组的相关操作:

    char str[100]  = "Hello,my name is Bruce.";
    char substr[100] = "my";
    char str2[100] = "I am Tom";
    char ch = ',';
    int n = 4;
     
    //1.字符串长度:
    int len = strlen(str);
     
    //2.字符串比较(相同返回0):
    int ret1 = strcmp(str,str2);
    int ret2 = strncmp(str,str2,n); //比较str和str2的前n个字符
     
    //3.查找
    char *p1 = strchr(str,ch);      //返回值为指针,找不到返回null
    char *p2 = strstr(str,substr);
    cout<< p1 <<endl;               //结果为:",my name is Bruce."
    cout<< *p1 <<endl;              //结果为:","
    cout<< p1-str <<endl;           //结果为:"5"
     
    //4.附加:
    strcat(str,str2);               //把str2连接到str后面
    strncat(str,str2,n);            //把str2的前n个字符连接到str后面
     
    //5.替换
    strcpy(str,str2);               //用str2替换str
    strncpy(str,str2,n);            //用str2的前n个字符替换str的前n个字符
    

      

    合并数组中相同的项:

    int a[10] = { 1,2,2,3,4,5,5,5,5,6};
    int nCount=unique(a,a+10)-a;//合并掉相同的项
    for(int i=0;i<nCount;++i)
    {
        cout<<a[i]<<" ";//结果为:1 2 3 4 5 6
    }
    

      

  • 相关阅读:
    CSS让DIV按照背景图片的比例缩放,并让背景图片填充整个元素(转)
    判断浏览器
    $.each遍历json对象
    jq塞入不同状态html的写法 switch (defaults.type)
    vue资料
    第三方登录
    获取一个项目的所有接口
    接口工具调研
    go自动化测试平台
    压测工具 vegeta
  • 原文地址:https://www.cnblogs.com/bruce27/p/4557721.html
Copyright © 2020-2023  润新知