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, cmp > q;

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 = {"a","b","c","d","e","f","g"};
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() 可以直接当作cmp函数来用

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函数

bitset - OI Wiki (oi-wiki.org)

posted @ 2023-02-05 10:18  风归去  阅读(188)  评论(0编辑  收藏  举报