C++ algorithm演算法庫 acm常用函式統計
阿新 • • 發佈:2019-02-12
轉載註明出處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)