本文原创首发CSDN,链接 https://blog.csdn.net/qq_41464123/article/details/104529376 ,作者博客https://blog.csdn.net/qq_41464123 ,转载请带上本段内容,尤其是脚本之家、码神岛等平台,谢谢配合。


前言

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

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

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

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

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

基本输入输出

//输入
cin>>a;
scanf("%d",&a);
scanf_s("%d",&a); //vs2019
fscanf(in,"%d",&a);
getchar();//获取一个字符
gets(a);//获取一行字符串
getline(cin,a);//获取一行String//输出
cout<<b;
printf("%d",b);
puts(b);
putchar(b);
fprintf(out,"%d",b);//输出到文件

函数库—algorithm

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

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

函数库—cstring

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

//初始化:memset(a, 0, sizeof(a));//初始化 只能0 -1//取长度:int len = strlen(a);//返回a的长度  到'\0'就算结束//复制:strcpy(a, b);//把b赋值给a 覆盖掉memcpy(a, b, 8);//把b赋值给a 覆盖掉8个长度//连接:strcat(a, b);//把b连接到a后面strncat(a, b, 3);//把b的最多3个字符连接到a后面//比较大小:strcmp(a, b);//a>b 返回正数,a<b返回负数,一样返回0strncmp(a, b, 7);//比较a和b的前7位字符 返回规则同上//查找:int xiabiao = strchr(a, 'l') - a;//返回a中找字符l出现的首地址 没有返回NULLint xiabiao2 = (char*)memchr(a, 'l', 7) - a;//返回a的前7个字符中找字符l出现的首地址 没有返回NULLstrspn(a, b);//比较a和b 从第一位开始,返回从头数相等的长度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;

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

函数库—string

vector的各种操作都适用于string

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

本文原创首发CSDN,链接 https://blog.csdn.net/qq_41464123/article/details/104529376 ,作者博客https://blog.csdn.net/qq_41464123 ,转载请带上本段内容,尤其是脚本之家、码神岛等平台,谢谢配合。


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)之中符合此一性质的最大子区间。

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

求i和j的距离:

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

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

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

Find_if函数:

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

求最大最小值:

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

STL之set

//定义: set<int>s;//插入数据: s.insert(6);//删除数据:s.erase(1);//删除集合中为1的所有元素s.clear();//全部删除//遍历输出:for (set<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << endl;}//查找:s.count(1);//有返回true, 没有返回falsecout << *s.find(1)<< endl;//find函数返回一个迭代器,取值需要加*,找不到返回end();//元素个数:s.size(); //判断为空: s.empty();//迭代器相关:s.find();//返回一个迭代器,取值需要加*,找不到返回end();s.equal_range() // 返回集合中与给定值相等的上下限的两个迭代器s.lower_bound()//返回指向⼤于(或等于)某值的第⼀个元素的迭代器s.upper_bound() // 返回⼤于某个值元素的迭代器//反向迭代遍历:set<int>::reverse_iterator iter = s1.rbegin(); for(iter;iter!=s1.rend();iter++){cout<<*iter<<" "; }//可重复的set集合:multiset<int>ss; 功能同set其中count(i)返回元素的个数

STL之map

//创建: map<string, int>m;//插入数据:m.insert(map<string, int>::value_type("he", 2));// insert函数返回一个pair,其first指向插入元素的迭代器;// 若原本插入的键不存在,second返回true,若原本存在,second返回falsem["ha"] = 3;//遍历:for (map<string, int>::iterator it = m.begin(); it != m.end(); it++) {cout << it->first << "  " << it->second << endl;}//查找:map<string, int>::iterator it = m.find("he"); //找不到返回m.end();//删除:m.erase("he");//删除键的值,返回被删除的个数(普通map为1)//元素个数:m.size();//判断为空:m.empty();//清空:m.clear();//map自定义排序:struct cmp {bool operator()(int const& a, int const& b)const {return a>b;}};multimap<int, int, cmp>m;m.insert(pair<int, int>(1, 2));m.insert(pair<int, int>(2, 3));m.insert(pair<int, int>(3, 4));for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {cout << it->first << " " << it->second << endl;}

STL之vector

//定义: vector<int>v;//插入元素:v.push_back(i); v.push_back(it,i);//在迭代器it前插入iv.push_back(it,n,i);//在迭代器it前插入n个元素i//尾部删除: v.pop_back();//首位元素:v.front();  //尾部元素:v.back();//判断为空:v.empty();//元素个数: v.size();//遍历:for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << endl;}//翻转:reverse(v.begin(), v.end());//排序:sort(v.begin(), v.end());sort(v.begin(), v.end(), cmp);//交换容器:v.swap(v2);//设置空间大小:v.resize(n);//设置长度为n

STL之queue

//普通队列:queue<int>q;//创建q.size();//返回元素个数q.empty();//返回是否为空q.push(3);  //插入元素3,入队q.pop();    //删除最上方元素,出队q.front();   //返回队首元素q.back();   //返回队尾元素//优先队列://1.默认优先级:定义:priority_queue<int>q;//默认大的数优先//2. 传入一个比较函数,使用functional.h函数对象作为比较函数priority_queue<int,vector<int>, greater<int> > q;//自定义小的数优先//3. 传入比较结构体,自定义优先级:struct cmp{bool operator()(int x,int y) {return x > y;//当前为小的数优先}};priority_queue<int,vector<int> ,cmp>q;//4. 自定义数据结构,自定义优先级//最快的一种struct ss {int x, y;ss(int xx, int yy) {x = xx;y = yy;}friend bool operator < (const ss& a, const ss& b) {if (b.x != a.x) return b.x < a.x;return b.y < a.y;}};priority_queue<ss>q;

STL之stack

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

STL之pair

//头文件:#include<utility>//定义:pair<int, string>p;//定义且初始化:pair<int, string>p(2,"hello");pair<int, string>p;p = make_pair(2, "hello");//返回键:p.first//返回值:p.second//比较:p = make_pair(2, "hello");pp = make_pair(2, "hello");cout << (p == pp) << endl;//相等 返回truep = make_pair(1, "hello");pp = make_pair(2, "hello");cout << (p < pp) << endl;//p比pp小 返回true//遵循字典序顺序,先比first,再比second

输入挂

const int MAXBUF = 10000;
char buf[MAXBUF], * ps = buf, * pe = buf + 1;
inline void rnext()
{if (++ps == pe)pe = (ps = buf) + fread(buf, sizeof(char), sizeof(buf) / sizeof(char), stdin);
}template <class T>
inline bool in(T& ans)
{ans = 0;T f = 1;if (ps == pe) return false;do {rnext();if ('-' == *ps) f = -1;} while (!isdigit(*ps) && ps != pe);if (ps == pe) return false;do{ans = (ans << 1) + (ans << 3) + *ps - 48;rnext();} while (isdigit(*ps) && ps != pe);ans *= f;return true;
}

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

  1. 站在巨人的肩膀上“思考”问题,重在思考而不是拿来主义

    米老师按:觉得值得讨论的小文!我还要认真地想一想 主题:围绕职责链设计模式-计算收费有效时间博客展开讨论 参与人: 讨论时间: 讨论内容 这次讨论主要分为以下几点: 一.职责链模式应用于机房收费系统计 ...

  2. 站在巨人的肩膀上看Servlet——原来如此(更适合初学者认识Servlet)

    前言: 有段时间没更新博客了,这段时间因为要准备考试,考完试后又忙了一阵别的事,一直没能静下心来写博客.大学考试真是越来越恶心了,各种心酸,那酸爽,够味.不过还好,马上就要大三了,听大三学长学姐说大三 ...

  3. “站在巨人的肩膀上”

    站在巨人的肩膀上需要拥有巨人的实力 容易错误理解成:"盗取"巨人的成果并漠视了巨人

  4. 【Visual C++】游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

    看到在留言中很多朋友提到不太清楚DirectX与游戏引擎的区别的问题,在这里浅墨就专门把自己对游戏引擎的一些理解写成一篇文章,作为我们<Visual C++游戏开发>专栏的游戏引擎导论,也 ...

  5. 3小时快速入门数学建模竞赛-建模技巧2:追根溯源,站在巨人的肩膀上

    我们要检索哪些信息?和怎样获得快速.准确的信息?这两个问题. 首先回答第一个问题,我们需要检索哪些信息?我们从我们需要求解的内容入手,请看思维导图和系统框图,我们需要求解35年寿命期内的发电总量.经济 ...

  6. 知识就是力量,让机器站在巨人的肩膀上

    作者:微软亚洲研究院 闫峻博士 知识是什么?抽象来说,是人类对世界的认知,对宏观及微观世界客观规律的总结.具体来说,大到牛顿定律.量子力学中的科学发现,小到自家孩子的生日.太太做饭常用的酱油颜色,都是 ...

  7. 站在巨人的肩膀上看世界,MySQL初步使用语法

    站在巨人的肩膀上看世界,MySQL初步使用  MySQL是一个常用的数据库,对于他的使用,我们需要尽量的了解它,但是掌握初步的语法,也可以勉强使用它,这都归功于它的研发者们.正是因为这些大佬,写好了软 ...

  8. 游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8250057 作者:毛星云(浅墨 ...

  9. 站在巨人的肩膀上:C#编写WindowsService

    本文将为大家详细介绍如何用C#编写一个系统服务,当然肯定不是教大家从头写,而是在一个搭建好的框架上进行自我创作! 一.项目整体架构 本项目的开发是针对某设备的开启异常情况进行邮件提醒,针对监控到的未开 ...

  10. 双引擎架构 Vite 是如何站在巨人的肩膀上实现的?

    在前面的章节中,我们学习了很多 Vite 使用和项目搭建的内容.接下来让我们将目光集中到 Vite 本身的架构上,一起聊聊它是如何站在巨人的肩膀上实现出来的.所谓的巨人,指的就是 Vite 底层所深度 ...

最新文章

  1. laravel homestead环境默认账号密码
  2. ab压力 failed_Apache ab 压力测试
  3. MySQL 免安装版的下载与配置教程
  4. 拯救乳房:乳腺癌AI诊断系统
  5. LeetCode 217 存在重复元素
  6. matlab 中括号
  7. 需求、需求工程与需求工程师 — 1.定义、作用
  8. 在Linux上安装Elasticsearch Kibaba.md
  9. argb可以和rgb同步吗_更冷更静更降温!第三代双腔设计,酷冷至尊海魔240水冷岂止RGB...
  10. python的追加_Python追加添加相同的数据
  11. VB 详细枚举指定目录、文件夹文件列表
  12. iphone5s显示被停用了解决办法
  13. 美国人口的模型预测——非线性最小二乘法
  14. 数据分析之Excel篇(三):计算统计函数
  15. 最新系统MacOs13 Ventura(M1/M2芯片) + Parallels Desktop 18(PD18史上最强虚拟机)永久使用攻略
  16. Linux网卡重命名规则
  17. Python-随机生成20位数字
  18. 数据基本类型各占几个字节?
  19. Linux电脑eduroam怎么连,【SHU·新生季】校园网连接指南
  20. c语言输出名人名言大全,编程语言之父6大经典名言,C语言之父这一段代码你见过吗?...

热门文章

  1. 鸿蒙系统2.0升级机型,鸿蒙系统2.0升级将覆盖华为的大面积的主流机型
  2. spdlog和fork冲突问题
  3. 2023年Q1电商平台饮料行业数据分析报告
  4. 浅谈--常见的引流方式及变现
  5. SQLZOO知识点补充
  6. 用NSKeyedArchiver存储数据(归档)
  7. Python调用腾讯API进行人脸身份证比对
  8. 如何提高苹果商店ASA广告的展示份额
  9. QA350迟来的报告,中毒已深,pk自己的全部家当-----愿大家为我排忧
  10. win7下elasticsearch5.0 安装head插件