慢慢把常用的函数总结下来
一.全排列:next_permutation
next_permutation
包含在头文件<algorithm>
中
int a[];
do
{
}
while(next_permutation(a,a+n));
例题:输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
#include<bits/stdc++.h>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
#include<cmath>
#define debug cout<<"ok"<<endl
typedef long long ll;
using namespace std;
const int maxn=1e5+10;
const int mod=1e9+7;
int n,a[maxn];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)a[i]=i;
do{
for(int i=1;i<=n;i++)printf("%5d",a[i]);
cout<<endl;
}while(next_permutation(a+1,a+1+n));
return 0;
}
P1088 火星人
输入输出样例
输入5
3
1 2 3 4 5
输出1 2 4 5 3
#include<bits/stdc++.h>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
#include<cmath>
#define debug cout<<"ok"<<endl
typedef long long ll;
using namespace std;
const int maxn=1e5+10;
const int mod=1e9+7;
int n,a[maxn],m;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
while(m--)//全排列m次就是题意中的第m大的数
next_permutation(a+1,a+1+n);
for(int i=1;i<=n;i++)printf("%d ",a[i]);//输出即可
cout<<endl;
return 0;
}
二.读写优化
inline int read()//快读
{
int x=0,f=0;
char ch=getchar();
while(ch>'9'||ch<'0'){if(ch='-')f|=(ch=='-');ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return f?-x:x;
}
ios::sync_with_stdio(false);//cin加速
三.返回容器内最大最小值
1.min_element(first,last)
寻找范围内最小值,返回迭代器
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v;
vector<int> ::iterator pos;
v.push_back(1);
v.push_back(3);
v.push_back(-8);
v.push_back(8);
pos=min_element(v.begin(),v.end());
cout<<*pos<<endl;
return 0;
}
输出:-8
2.max_element(first,last)
寻找范围内最大值,返回迭代器
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v;
vector<int> ::iterator pos;
v.push_back(1);
v.push_back(3);
v.push_back(-8);
v.push_back(8);
pos=max_element(v.begin(),v.end());
cout<<*pos<<endl;
return 0;
}
输出:8
四.复制函数
1.copy(first,last,result)
将first到last区间的元素复制到result中:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int myints[]= {10,20,30,40,50,60,70};
vector<int> myvector;
vector<int>::iterator it;
myvector.resize(7);
copy ( myints, myints+7, myvector.begin() );
for(int i=0; i<myvector.size(); i++)
cout<<myvector[i]<<" ";
cout<<endl;
return 0;
}
2.亦可用于字符串中
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
char s[24]="123456789";
char s1[24]="";
copy(s,s+5,s1);
cout<<s1<<endl;
return 0;
}
五.容器删除函数
remove(first,last,value)
将区间first到last区间中值为value的元素删除
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int num[]= {1,2,3,4,5,1,0};
int *pbegin=num;
int *pend=num+sizeof(num)/sizeof(int);
pend=remove(pbegin,pend,1);
for(int *p=pbegin; p!=pend; p++)
cout<<*p<<" ";
cout<<endl;
return 0;
}
六.容器填充函数
fill(first,last,value)
将区间first到last区间全部初始为value
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v(8);
fill(v.begin(),v.end(),1);
for(int i=0; i<v.size(); i++)
cout<<v[i]<<" ";
cout<<endl;
return 0;
}
七.查找函数
find(first,last,value)
查找first到last区间第一个值为value元素的位置,返回一个迭代器
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int num[]= {1,2,3,4,5};
int *p;
p=find(num,num+5,3);
if(p==num+5)
cout<<"Not found!"<<endl;
else
cout<<*p<<endl;
return 0;
}
八.字符串转换整数
atoi(char);
把字符串(字符char)转换成整型数的一个函数
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int data;
data=atoi("123");
printf("%d\n",data);
return 0;
}
stoi;
把字符串(string)转换成整数
typedef unsigned long long ll;
ll stoi(char *ss,ll l,ll r)//自己写一个字符串转整数。想知道为什么cstring里包含的stoi()用不了
{
ll res=0;
if(l>r)return 0;
for (ll i=l;i<=r;i++)
{
res*=10;
res+=ss[i]-'0';
}
return res;
}
来源:CSDN
作者:蛋蛋さん
链接:https://blog.csdn.net/weixin_45697774/article/details/103478643