当前位置: 首页 > news >正文

c++中一些常用库函数

1.最大公约数

需要包括头文件#include<algorithm>,直接写__gcd(a,b),就是求a与b的最大公约数。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<list>
#include<deque>
#define int long long
#define x first
#define y second
using namespace std;
const int N=1e7+5,INF=0x3f3f3f3f,mod=1e9+7,M=5050;
typedef long long LL;
typedef pair<int,int>PII;
void solve(){int a,b;cin>>a>>b;cout<<__gcd(a,b);
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _;//cin>>_;while(_--) solve();return 0;
}

2.最小公倍数

求最小公倍数没有库函数,但是可以调用lcm函数,就是用a*b/__gcd(a,b),或者直接写该公式。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<list>
#include<deque>
#define int long long
#define x first
#define y second
using namespace std;
const int N=1e7+5,INF=0x3f3f3f3f,mod=1e9+7,M=5050;
typedef long long LL;
typedef pair<int,int>PII;
int lcm(int a,int b){return a*b/__gcd(a,b);
}
void solve(){int a,b;cin>>a>>b;cout<<lcm(a,b);
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _;//cin>>_;while(_--) solve();return 0;
}

3.to_string函数

需要包括头文件#include<cstring>,该函数就是将数字转化为字符串

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<list>
#include<deque>
#define int long long
#define x first
#define y second
using namespace std;
const int N=1e7+5,INF=0x3f3f3f3f,mod=1e9+7,M=5050;
typedef long long LL;
typedef pair<int,int>PII;
void solve(){int a;string s;cin>>a;s=to_string(a);cout<<s;//输出的为字符串 
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _;//cin>>_;while(_--) solve();return 0;
}

4.stoi函数

需要包括头文件#include<cstring>,该函数就是将字符串类型的数字转为int类型的数字。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<list>
#include<deque>
#define int long long
#define x first
#define y second
using namespace std;
const int N=1e7+5,INF=0x3f3f3f3f,mod=1e9+7,M=5050;
typedef long long LL;
typedef pair<int,int>PII;
void solve(){ string s;cin>>s;int a;a=stoi(s); cout<<a; 
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _;//cin>>_;while(_--) solve();return 0;
}

5.stol函数

需要包括头文件#include<cstring>​​​​​​​,该函数就是将字符串类型的数字转为long int类型的数字。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<list>
#include<deque>
#define int long long
#define x first
#define y second
using namespace std;
const int N=1e7+5,INF=0x3f3f3f3f,mod=1e9+7,M=5050;
typedef long long LL;
typedef pair<int,int>PII;
void solve(){ string s;cin>>s;int a;a=stol(s); cout<<a; 
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _;//cin>>_;while(_--) solve();return 0;
}

6.stoll函数

需要包括头文件#include<cstring>​​​​​​​,该函数就是将字符串类型的数字转为long  long int类型的数字。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<list>
#include<deque>
#define int long long
#define x first
#define y second
using namespace std;
const int N=1e7+5,INF=0x3f3f3f3f,mod=1e9+7,M=5050;
typedef long long LL;
typedef pair<int,int>PII;
void solve(){ string s;cin>>s;int a;a=stoll(s); cout<<a; 
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _;//cin>>_;while(_--) solve();return 0;
}

7.emplace_back()函数

该函数是c++11的特性,可以在一些vector,list,string等容器的尾部添加一个元素,它与push_back()的区别就是:

push_back():向容器中加入一个右值元素(临时对象)时,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放入容器中。原来的临时变量释放。这样造成的问题就是临时变量申请资源的浪费。

emplace_back():引入了右值引用,转移构造函数,在插入的时候直接构造,只需要构造一次即可。

也就是说,两者的底层实现的机制不同。push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。

总结:

1.push_back 可以接收左值也可以接受右值,接收左值时使用拷贝构造,接收右值时使用移动构造

2.emplace_back 接收右值时调用类的移动构造

3.emplace_back 接收左值时,实际上的执行效果是先对传入的参数进行拷贝构造,然后使用拷贝构造后的副本,也就是说,emplace_back在接收一个左值的时候其效果和push_back一致!所以在使用emplace_back 时需要确保传入的参数是一个右值引用,如果不是,请使用std::move()进行转换。

http://www.lryc.cn/news/340367.html

相关文章:

  • 竞赛 基于GRU的 电影评论情感分析 - python 深度学习 情感分类
  • 软件杯 深度学习图像修复算法 - opencv python 机器视觉
  • java日志log4j使用
  • 探索Python爬虫利器:Scrapy框架解析与实战
  • Rust腐蚀服务器修改背景和logo图片操作方法
  • 【架构-15】NoSQL数据库
  • 中国人工智能产业年会智能交通与自动驾驶专题全景扫描
  • SpringBoot相关知识点总结
  • 【QT】关于qcheckbox常用的三个信号,{sstateChanged(int) clicked() clicked(bool)}达成巧用
  • 在线音乐网站的设计与实现
  • 【电路笔记】-数字缓冲器
  • Opencv | 基于ndarray的基本操作
  • 【大语言模型】应用:10分钟实现搜索引擎
  • UT单元测试
  • leetcode-合并两个有序链表
  • 006Node.js cnpm的安装
  • web server apache tomcat11-01-官方文档入门介绍
  • java的总结
  • 解决npm run dev跑项目,发现node版本不匹配,怎么跑起来?【已解决】
  • flood_fill 算法|图形渲染
  • Promise简单概述
  • 【Java集合进阶】数据结构(平衡二又树旋转机制)数据结构(红黑树、红黑规则、添加节点处理方案详解)
  • 富文本在线编辑器 - tinymce
  • 从汇编代码理解数组越界访问漏洞
  • skynet 使用protobuf
  • Vue Router 4 与 Router 3 路由配置与区别
  • python借助elasticsearch实现标签匹配计数
  • Yolo-world+Python-OpenCV之摄像头视频实时目标检测
  • vue-treeselect 的基本使用
  • Vue(二)