C++函数总结
1、fabs返回浮点数的绝对值,abs返回整数绝对值
2、运算符重载之后排序比写一个排序函数排序要快
struct node{
int x, y, z;
bool operator < (const node &p) const{
return z < p.z;
}
}a[N];
3、register :
定义局部变量,存放在cpu中,会快一点。但是不能做与运算!
4、结构体重载
truct node{
int x, y, h;
}a[N * N];
struct cmp{
bool operator () (node s1, node s2){
return s1.h > s2.h;
}
};
5、fmod(n,m):浮点数取余
priority_queue< node, vector
6、数组赋初值
memset(f, 0xcf, sizeof f) -> -808464433
memset(f, -0x3f, sizeof f) -> -1044266559
memset(f, 0x3f, sizeof f) -> 1061109567
const int N = 20;
int a[N];
signed main(){
memset(a, ~0xcf, sizeof a);
cout << a[1] << endl;
//ans:808464432
}
7、erase函数
对于容器而言的函数
用法①:erase
vector
e.erase("c"); //删除字符串“c”
auto it = e.end()-1; //.end()指向末尾的后一个元素,因此需要-1,指向末尾元素
e.erase(it); //删除末尾元素“g”
auto it2 = e.begin()+1;
auto it3 = e.end()-2;
用法②:e.erase(it2,it3); //删除it2到it3之间的元素
8、unique 函数(去重)
首先需要对待去重的数组进行排序
int ans = unique(a + 1, a + 1 + n) - (a + 1)。返回值ans为数组有多少个不同的数,然后数组的前ans个数,就是该数组的不同的数的个数。
需要注意的是,执行该操作,并不意味着,数组内重复的元素被删除掉了。
unique去重之后,数组返回的容器大小是不重复元素的个数
9.greater
10、vector查找函数
查找:if(find(vet.begin(), vet.end(), x) != vet.end()), 时间复杂度O(n)
11、string查找
string st1, st2;
查找: int pos = st1.find(st2), 从st1中找到一个等于st2的串,并返回第一次出现的位置
//为避免重复查找,可以在找到一个串之后,就将这个串进行更新
12、lower_bound&&upper_bound
对于有序数组a而言,在O(logn)时间内返回查找结果
lower_bound:
①int x = lower_bound(a + 1, a + 1 + n, num) - a : 下标从1开始,返回第一个大于等于num的数的位置
②int x = lower_bound(a, a + n, num) - a : 下标从0开始,返回第一个大于等于num的数的位置
upper_bound和lower_bound用法类似,但是返回的是第一个大于num的数的位置
需要注意的是,使用的时候,要注意判断是否找到我们想要的结果。如果返回的位置为n + 1, 说明没找到,这个时候要进行特判!
13、对数函数
14、substr函数
15、bitset函数
-
两种初始化方式:
bitset<23>bit (string("11101001")); cout<<bit<<endl; bit=233; cout<<bit<<endl;
-
bitset与位运算
- bitset函数