c++中一些常用库函数

1.最大公约数

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

cpp 复制代码
#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),或者直接写该公式。

cpp 复制代码
#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>** ,该函数就是将数字 转化为字符串

cpp 复制代码
#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类型的数字。

cpp 复制代码
#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类型的数字。

cpp 复制代码
#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类型的数字。

cpp 复制代码
#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()进行转换。

相关推荐
消失的旧时光-19434 分钟前
Kotlin 高阶函数在回调设计中的最佳实践
android·开发语言·kotlin
再卷也是菜7 分钟前
算法基础篇(8)贪心算法
算法·贪心算法·1024程序员节
LucianaiB36 分钟前
掌握 Rust:从内存安全到高性能服务的完整技术图谱
开发语言·安全·rust
AI科技星39 分钟前
接近光速运动下的光速不变性:基于张祥前统一场论的推导与验证
数据结构·人工智能·经验分享·算法·计算机视觉
m0_7482402541 分钟前
C++ 游戏开发示例:简单的贪吃蛇游戏
开发语言·c++·游戏
Summer_Uncle1 小时前
【C++学习】指针
c++·学习
陈苏同学1 小时前
笔记1.4:机器人学的语言——三维空间位姿描述 (旋转矩阵 - 齐次变换矩阵 - 欧拉角 - 四元数高效表示旋转)
笔记·线性代数·算法·机器人
兰亭妙微1 小时前
2026年UX/UI五大趋势:AI、AR与包容性设计将重新定义用户体验
开发语言·ui·1024程序员节·界面设计·设计趋势
蜗牛沐雨2 小时前
详解C++中的字符串流
c++·1024程序员节
蜗牛沐雨2 小时前
详解C++中的流
c++·1024程序员节