小言_互联网的博客

站在巨人的肩膀上,C++最常用的200个函数

453人阅读  评论(0)

前言

 

当我们需要实现某一个功能的时候,常常需要自己编写一些代码才能实现。

有些时候对于常用模块,我们可以采用他人编写好的代码,加快编程效率。

比如进制转换,与其自己写个Stack模拟,不如调用itoa()函数一步实现......

本文纯本人手打,且原创首发在CSDN

我将根据我的学习进度,不定期更新,若有不足,欢迎指出,谢谢!

 

基本输入输出


  
  1. //输入
  2. cin>>a;
  3. scanf( "%d",&a);
  4. scanf_s( "%d",&a); //vs2019
  5. fscanf(in, "%d",&a);
  6. getchar(); //获取一个字符
  7. gets(a); //获取一行字符串
  8. getline( cin,a); //获取一行String
  9. //输出
  10. cout<<b;
  11. printf( "%d",b);
  12. puts(b);
  13. putchar(b);
  14. fprintf(out, "%d",b); //输出到文件

 

函数库—algorithm

固定数组  int a[] = { 1, 3, 5, 7, 9, 11, 13 };      int b[11] = { 1, 2, 3, 4 };   
用于下列函数测试


  
  1. //二分查找:
  2. lower_bound(a, a + 7, 7); //返回第一个大于等于7的地址
  3. upper_bound(a, a + 7, 7); //返回第一个小于等于7的地址
  4. binary_search(a, a + 7, 8); //若a到a+7有8,返回true 否则返回false
  5. //反转函数:
  6. reverse(a, a + 7); //反转a到a+7的元素
  7. //填充替换函数:
  8. fill(a, a + 7, 4); //填充函数,把a到a+7全部填充为4
  9. copy_backward(a, a + 7, b + 7); //把a数组复制到b,首地址,尾地址,复制后数组的尾地址
  10. replace(b, b + 4, 3, 5); //把b到b+4中所有3替换成5
  11. //全排列函数:
  12. next_permutation(b, b + 4); //b数组的下一个排列
  13. prev_permutation(b, b + 4); //b数组的上一个排列
  14. //排序去重函数:
  15. stable_sort(a, a + 7, cmp); //按照cmp规则稳定排序a到a+7
  16. unique(a, a + 7); //去重,返回去重后数组的尾地址
  17. printf( "%d\n", *max_element(a, a + 6)); //返回序列a到a+6的最大元素地址

 

函数库—cstring

固定数组 用于验证函数。char a[200] = "hello world";     char b[] = "hello acm";


  
  1. //初始化:
  2. memset(a, 0, sizeof(a)); //初始化 只能0 -1
  3. //取长度:
  4. int len = strlen(a); //返回a的长度 到'\0'就算结束
  5. //复制:
  6. strcpy(a, b); //把b赋值给a 覆盖掉
  7. memcpy(a, b, 8); //把b赋值给a 覆盖掉8个长度
  8. //连接:
  9. strcat(a, b); //把b连接到a后面
  10. strncat(a, b, 3); //把b的最多3个字符连接到a后面
  11. //比较大小:
  12. strcmp(a, b); //a>b 返回正数,a<b返回负数,一样返回0
  13. strncmp(a, b, 7); //比较a和b的前7位字符 返回规则同上
  14. //查找:
  15. int xiabiao = strchr(a, 'l') - a;
  16. //返回a中找字符l出现的首地址 没有返回NULL
  17. int xiabiao2 = ( char*) memchr(a, 'l', 7) - a;
  18. //返回a的前7个字符中找字符l出现的首地址 没有返回NULL
  19. strspn(a, b); //比较a和b 从第一位开始,返回从头数相等的长度
  20. strstr(a, b)-a; //返回b在a首次出现的地址

 

函数库—cmath

int a = 1, b = -2, c = 3, d = 4;

double e = 1.1, f = 8.36, g = 2.2, h =3.4;


  
  1. e = sqrt(f); //平方根函数 返回根号f
  2. e = cbrt(f); //立方根函数 返回三次根号f
  3. e = pow(f, g); //幂函数 返回f的g次方
  4. e = floor(f); //向下取整 返回f的向下取整的整数
  5. e = ceil(f); //向上取整 返回f的向上取整的整数
  6. a = abs(b); //int类型 返回b的绝对值
  7. e = fabs(f); //double类型 返回f的绝对值
  8. e = fmod(f, g); //double类型 返回f除以g的余数
  9. e = modf( 2.36, &f); //把2.36的整数部分赋值给f(有&) 把小数返回给e
  10. e = frexp( 1024.0, &a);
  11. //把1024.8转化为0.5*2^11;0.5返回 11赋值给a,返回的小数范围[0.5,1)
  12. e = ldexp( 1.0, 3); //返回1.0 *(2^3)
  13. e = exp( 3); //返回e的3次方 exp(1)就是e的值 acos(-1)就是pai的值
  14. f = log( 666.0); //返回log e (666.0) 以e为底数
  15. f = log10( 666.0); //返回log 10 (666.0) 以10为底数
  16. f = log10( 8) / log10( 2); // 计算log 2 (8) 运用换底公式
  17. f = acos( -1); //返回以弧度表示的 -1 的反余弦
  18. f = asin( -1); //返回以弧度表示的 -1 的反正弦
  19. f = atan( -1); //返回以弧度表示的 -1 的反正切
  20. f = atan2( 1, 2); //返回以弧度表示的 1/2 的反正切。1和2的值的符号决定了正确的象限。
  21. f = cos( 1.1); //返回弧度为1.1的余弦
  22. f = sin( 1.1); //返回弧度为1.1的正弦
  23. f = tan( 1.1); //返回弧度为1.1的正切
  24. f = cosh( 1.1); //返回弧度为1.1的双曲余弦
  25. f = sinh( 1.1); //返回弧度为1.1的双曲正弦
  26. f = tanh( 1.1); //返回弧度为1.1的双曲正切
  27. f = hypot( 3, 4); //返回以3和4为直角边的三角形斜边长

 

函数库—string

vector的各种操作都适用于string


  
  1. //赋值初始化:
  2. string str = “abcd”;
  3. //比大小:
  4. string a = "abc";
  5. string b = "abd";
  6. cout << a.compare(b) << endl; // -1
  7. //a比b大就返回1,相等返回0,a比b小返回-1
  8. //重载1:compare()参数可以是char[]类型
  9. //重载2:str1.compare(2,3,str2,0,3) //str1的第二位开始(下标从0开始算),长度3位,和str2第0位开始长度3位比较
  10. //重载3:str1.compare(2,3,str2)
  11. //str1的第二位开始(下标从0开始算),长度3位,和str2整体比较
  12. //重载2中不允许第一二个参数为空
  13. //连接:
  14. str1 += str2;
  15. //长度:
  16. str1.length();
  17. str1.size();
  18. //String转char[] :
  19. string str = "hello world";
  20. const char* a = str.c_str();
  21. //这个a只能输出,不能修改
  22. //char[]转String:
  23. char a[ 20] = "hello world!";
  24. string str = a; //可以直接暴力转换
  25. //截取:
  26. str.substr( 2, 3);
  27. //截取字符串str第二位开始的连续三位,下标从0开始,如果超出长度则到字符串结尾结束
  28. //判断为空:
  29. Str.empty(); 是空返回真
  30. //删除:
  31. s.erase( 0, 1); // 从0位置开始 删除1个字符

 

STL通用库函数

 

二分查找函数:equal_range

用法:

equal_range是C++ STL中的一种二分查找的算法,试图在已排序的[first,last)中寻找value,它返回一对迭代器i和j,其中i是在不破坏次序的前提下,value可插入的第一个位置(亦即lower_bound),j则是在不破坏次序的前提下,value可插入的最后一个位置(亦即upper_bound),因此,[i,j)内的每个元素都等同于value,而且[i,j)是[first,last)之中符合此一性质的最大子区间。


  
  1. pair< set< int>::iterator, set< int>::iterator > p = equal_range(s.begin(), s.end(), 4);
  2. //查找4这个元素

求i和j的距离:

distance(p.first, p.second),//若STL中不存在则返回0;否则存在

求i和j迭代器指向的值:

*p.first  << " " << *p.second

 

Find_if函数:

用法:从begin开始 ,到end为止,返回第一个让 func这个函数返回true的iterator。

 

求最大最小值:


  
  1. max_element(v.begin(),v.end()); //返回v容器中的最大值的迭代器
  2. min_element(v.begin(),v.end()); //返回v容器中的最小值的迭代器

 

STL之set

 


  
  1. //定义:
  2. set< int>s;
  3. //插入数据:
  4. s.insert( 6);
  5. //删除数据:
  6. s.erase( 1); //删除集合中为1的所有元素
  7. s.clear(); //全部删除
  8. //遍历输出:
  9. for ( set< int>::iterator it = s.begin(); it != s.end(); it++) {
  10. cout << *it << endl;
  11. }
  12. //查找:
  13. s.count( 1); //有返回true, 没有返回false
  14. cout << *s.find( 1)<< endl;
  15. //find函数返回一个迭代器,取值需要加*,找不到返回end();
  16. //元素个数:
  17. s.size();
  18. //判断为空:
  19. s.empty();
  20. //迭代器相关:
  21. s.find(); //返回一个迭代器,取值需要加*,找不到返回end();
  22. s.equal_range() // 返回集合中与给定值相等的上下限的两个迭代器
  23. s.lower_bound() //返回指向⼤于(或等于)某值的第⼀个元素的迭代器
  24. s.upper_bound() // 返回⼤于某个值元素的迭代器
  25. //反向迭代遍历:
  26. set< int>::reverse_iterator iter = s1.rbegin();
  27. for(iter;iter!=s1.rend();iter++)
  28. {
  29. cout<<*iter<< " ";
  30. }
  31. //可重复的set集合:
  32. multiset< int>ss; 功能同 set其中count(i)返回元素的个数

STL之map


  
  1. //创建:
  2. map< string, int>m;
  3. //插入数据:
  4. m.insert( map< string, int>::value_type( "he", 2));
  5. // insert函数返回一个pair,其first指向插入元素的迭代器;
  6. // 若原本插入的键不存在,second返回true,若原本存在,second返回false
  7. m[ "ha"] = 3;
  8. //遍历:
  9. for ( map< string, int>::iterator it = m.begin(); it != m.end(); it++) {
  10. cout << it->first << " " << it->second << endl;
  11. }
  12. //查找:
  13. map< string, int>::iterator it = m.find( "he"); //找不到返回m.end();
  14. //删除:
  15. m.erase( "he"); //删除键的值,返回被删除的个数(普通map为1)
  16. //元素个数:
  17. m.size();
  18. //判断为空:
  19. m.empty();
  20. //清空:
  21. m.clear();
  22. //map自定义排序:
  23. struct cmp {
  24. bool operator()(int const& a, int const& b)const {
  25. return a>b;
  26. }
  27. };
  28. multimap< int, int, cmp>m;
  29. m.insert(pair< int, int>( 1, 2));
  30. m.insert(pair< int, int>( 2, 3));
  31. m.insert(pair< int, int>( 3, 4));
  32. for ( map< int, int>::iterator it = m.begin(); it != m.end(); it++) {
  33. cout << it->first << " " << it->second << endl;
  34. }

STL之vector


  
  1. //定义:
  2. vector< int>v;
  3. //插入元素:
  4. v.push_back(i);
  5. v.push_back(it,i); //在迭代器it前插入i
  6. v.push_back(it,n,i); //在迭代器it前插入n个元素i
  7. //尾部删除:
  8. v.pop_back();
  9. //首位元素:
  10. v.front();
  11. //尾部元素:
  12. v.back();
  13. //判断为空:
  14. v.empty();
  15. //元素个数:
  16. v.size();
  17. //遍历:
  18. for ( vector< int>::iterator it = v.begin(); it != v.end(); it++) {
  19. cout << *it << endl;
  20. }
  21. //翻转:
  22. reverse(v.begin(), v.end());
  23. //排序:
  24. sort(v.begin(), v.end());
  25. sort(v.begin(), v.end(), cmp);
  26. //交换容器:
  27. v.swap(v2);
  28. //设置空间大小:
  29. v.resize(n); //设置长度为n

STL之queue


  
  1. //普通队列:
  2. queue< int>q; //创建
  3. q.size(); //返回元素个数
  4. q.empty(); //返回是否为空
  5. q.push( 3); //插入元素3,入队
  6. q.pop(); //删除最上方元素,出队
  7. q.front(); //返回队首元素
  8. q.back(); //返回队尾元素
  9. //优先队列:
  10. //1.默认优先级:定义:
  11. priority_queue< int>q; //默认大的数优先
  12. //2. 传入一个比较函数,使用functional.h函数对象作为比较函数
  13. priority_queue< int, vector< int>, greater< int> > q; //自定义小的数优先
  14. //3. 传入比较结构体,自定义优先级:
  15. struct cmp
  16. {
  17. bool operator()(int x,int y) {
  18. return x > y; //当前为小的数优先
  19. }
  20. };
  21. priority_queue< int, vector< int> ,cmp>q;
  22. //4. 自定义数据结构,自定义优先级//最快的一种
  23. struct ss {
  24. int x, y;
  25. ss( int xx, int yy) {
  26. x = xx;
  27. y = yy;
  28. }
  29. friend bool operator < ( const ss& a, const ss& b) {
  30. if (b.x != a.x) return b.x < a.x;
  31. return b.y < a.y;
  32. }
  33. };
  34. priority_queue<ss>q;

STL之stack


  
  1. //定义:
  2. stack< int>s;
  3. //常用函数:
  4. empty(); //堆栈为空则返回真
  5. pop(); //移除栈顶元素
  6. push(); //在栈顶增加元素
  7. size(); //返回栈中元素数目
  8. top(); //返回栈顶元素
  9. //假设内置结构体有构造函数,则以下两句等价:
  10. s.push(ss( 1, 2));
  11. s.emplace( 1, 2); //免构造
  12. s.swap(ss)可以互换两个栈的元素

STL之pair


  
  1. //头文件:
  2. #include<utility>
  3. //定义:
  4. pair< int, string>p;
  5. //定义且初始化:
  6. pair< int, string>p( 2, "hello");
  7. pair< int, string>p;
  8. p = make_pair( 2, "hello");
  9. //返回键:
  10. p.first
  11. //返回值:
  12. p.second
  13. //比较:
  14. p = make_pair( 2, "hello");
  15. pp = make_pair( 2, "hello");
  16. cout << (p == pp) << endl; //相等 返回true
  17. p = make_pair( 1, "hello");
  18. pp = make_pair( 2, "hello");
  19. cout << (p < pp) << endl; //p比pp小 返回true
  20. //遵循字典序顺序,先比first,再比second

输入挂


  
  1. const int MAXBUF = 10000;
  2. char buf[MAXBUF], * ps = buf, * pe = buf + 1;
  3. inline void rnext()
  4. {
  5. if (++ps == pe)
  6. pe = (ps = buf) + fread(buf, sizeof( char), sizeof(buf) / sizeof( char), stdin);
  7. }
  8. template < class T>
  9. inline bool in(T& ans)
  10. {
  11. ans = 0;
  12. T f = 1;
  13. if (ps == pe) return false;
  14. do {
  15. rnext();
  16. if ( '-' == *ps) f = -1;
  17. } while (! isdigit(*ps) && ps != pe);
  18. if (ps == pe) return false;
  19. do
  20. {
  21. ans = (ans << 1) + (ans << 3) + *ps - 48;
  22. rnext();
  23. } while ( isdigit(*ps) && ps != pe);
  24. ans *= f;
  25. return true;
  26. }

 


转载:https://blog.csdn.net/qq_41464123/article/details/104529376
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场