1. 程式人生 > >C++ algorithm演算法庫 acm常用函式統計

C++ algorithm演算法庫 acm常用函式統計

轉載註明出處csdn bestsort

#函式統計
##字串相關

  • substr()
substr 方法將返回一個包含從 start 到最後(不包含 end )的子字串的字串。
string sub2 = s.substr(5, 3); //從下標為5開始擷取長度為3位:sub2 = "567"
string sub1 = s.substr(5); //只有一個數字5表示從下標為5開始一直到結尾:sub1 = "56789"

##求gcd

  • __gcd(a,b).(兩個下劃線開頭)
    int a=34,b=4;
    cout << __gcd(a,b)<<endl;

注:部分oj可能不支援呼叫__gcd;
##求全排列

  • 求陣列a的上一個排列prev_permutation(a,a+a.size())
int a[] = {1,4,2,3};
    prev_permutation(a,a+4);
    for(int i=0;i<4;i++)
        cout << a[i] << endl;
    return 0;
  • 求陣列a的下一個排列next_permutation(a,a+.size())
int a[] = {1,4,2,3};
    next_permutation(a,a+4);
    for(int i=0;i<4;i++)
        cout << a[i] << endl;
    return 0;

##二分
此類目下兩個函式都是返回的地址,所以要求下標則需要減去初始地址a

  • 查詢大於或等於x的第一個位置 lower_bound(a,a+a.size(),x)
int a[] = {1,3,5,7,9,11};
cout << a[lower_bound(a,a+6,7)-a] << endl;

-查詢第一個大於x的數字的位置upper_bound(a,a+a.size(),x)。用法同上
##初始化

  • 將a陣列中前n項填充數字x:fill(a,a+n,x)
  • cstring中,將a陣列前n個內容初始化為bmemset(a,b,n<<2),b只能0,-1,0x3f,初始化的結果分別為0,-1,0x3f3f3f3f(無窮大),用於做題時推薦寫memset(a,b,(n+3)<<2)
    防止出錯
    ##其他
  • 翻轉a[x]-a[y]之間的內容:reverse(a+x,a+y)翻轉區間[x,y)
  • 交換a,b的值`swap(a,b)
  • x轉化為二進位制中1的個數__builtin_popcount(x)