在C++ 信息學競賽中,有許多常用函數能大幅提升編程效率。下面為你介紹一些常見函數及其一般用法:
一、比較函數
1、max()
//求出a,b的較大值
int?a=10,b=5,c;
c=max(a,b);
//得出的結果就是c等于10.
2、min()
//求出a,b的較小值
int?a=10,b=5,c;
c=min(a,b);
//得出的結果就是c等于5.
3、swap()
//交換a,b變量的值
int?a=10,b=5;
swap(a,b);
//得出的結果就是a等于5;b等于10.
二、數學函數
1、abs()
//用于計算整數的絕對值
int?a =?-5;
int?b =?abs(a);?// b 的值為 5
2、fabs()
//用于計算浮點數的絕對值:
???????
double?x =?-3.14;
double?y =?fabs(x);?
// y 的值為 3.14
3、pow()
//用于計算冪次方,不過返回值為?double
?類型,使用時要留意精度問題。
double?result =?pow(2,?3);?
// 計算 2 的 3 次方,result 的值為 8.0
4、sqrt()
//用于計算平方根:
???????
double?root =?sqrt(16);?
// root 的值為 4.0
5、round()
//四舍五入到整數
double?a =?3.5;
double?r = round(a); ?
// 返回 4.0(向最近的整數舍入)
“四舍六入五成雙”(銀行家舍入法):
若小數部分?恰好為 0.5,則舍入到?最近的偶數。
???????
round(2.5); ?
// 返回 2.0(偶數)
round(3.5);?
?// 返回 4.0(偶數)
其他情況正常四舍五入:
???????
round(2.4); ?
// 返回 2.0
round(2.6); ?
// 返回 3.0
round(-2.5);?
// 返回 -2.0(偶數)
6、floor()
//向下取整 floor(1.0/2) = 0等同于 1/2
floor(3.5); ?
// 返回 3.0
floor(-3.5);?
// 返回 -4.0
7、ceil()
//向上取整 ceil(1.0/2) = 1
std::ceil(3.5); ??
// 返回 4.0
std::ceil(-3.5);?
// 返回 -3.0
三、字符串處理函數
1、substr()
//用于截取子字符串:
string?s =?"abcdef";
string?sub1 = s.substr(1,?3);?
// 從索引 1 開始,截取長度為 3 的子字符串,sub1 的值為 "bcd"
string?sub2 = s.substr(2);?
// 從索引 2 開始截取到字符串末尾,sub2 的值為 "cdef"
2、stoi()
、stod()
//用于將字符串轉換為整數或雙精度浮點數:
???????
string?numStr =?"123";
int?num = stoi(numStr);?// num 的值為 123
string?doubleStr =?"3.14";
double?d = stod(doubleStr);?// d 的值為 3.14
四、算法庫函數
1、sort()
//用于對數組或容器進行排序:
???????
int?arr[] = {5,?3,?1,?4,?2};
int?n =?sizeof(arr)?
// sizeof(arr[0]);
sort(arr, arr + n);?
// 對數組進行升序排序
vector<int> v = {5,?3,?1,?4,?2};
sort(v.begin(), v.end());?
// 對向量進行升序排序
五、內存操作函數
1、memset()
//用于初始化數組:
???????
int?arr[10];
memset(arr,?0,?sizeof(arr));?// 將數組所有元素初始化為 0
// 注意:如果要初始化為其他值(如 -1),可以使用以下方式
memset(arr,?-1,?sizeof(arr));?// 將數組所有元素初始化為 -1