#include
using namespace std;
char coverch(char ch)
{
if(islower(ch))ch=toupper(ch);
else if(isupper(ch))ch=tolower(ch);
return ch;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
string s;
getline(cin,s);
for(auto &i:s)
{
i=coverch(i);
}
cout<
#include
int main()
{
using namespace std;
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>numbers={1,3,5,7,9};
int target=5;
bool found=binary_search(numbers.begin(),numbers.end(),target);
if(found)
cout<<target<<" "<<"is found"<<endl;
else
cout<<target<<"is not found"<<endl;
return 0;
}
#include
using namespace std;
int main()
{
vector<int> s={5,1,7,3,10,18,9};
sort(s.begin(),s.end());
for(auto &i:s)
cout<<i<<' ';
cout<<"\n";
//找到数组中第一个大于等于8的元素的地址
cout<<(lower_bound(s.begin(),s.end(),8)-s.begin())<<"\n";
return 0;
}
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int data[200];
for(int i = 0 ; i < 200 ; i ++)
data[i] = 4 * i + 6;
int target;
cin>>target;
cout<<lower_bound(data,data+200,target)-data<<"\n";
return 0;
}
注:不是容器(例如:vector和list)对象的不能用begin()函数。修改如下:
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>data(200);
for(int i = 0 ; i < 200 ; i ++)
data[i] = 4 * i + 6;
int target;
cin>>target;
cout<<lower_bound(data.begin(),data.end(),target)-data.begin()<<"\n";
return 0;
}
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>v={5,1,3,9,11};
cout<<*min_element(v.begin(),v.end())<<"\n";
return 0;
}
注:这段代码中的星号(*)表示解引用,即通过地址(迭代器)得到值。
#include
using namespace std;
int main()
{
vector<int>v={5,1,7,3,10,18,9};
nth_element(v.begin(),v.begin()+3,v.end());//返回值为空,说明这条语句不能输出
for(auto &i:v)
cout<<i<<"\n";
return 0;
}
#include
using namespace std;
using ll=long long;//数组记得开long long
const int N=10001;
int a[N];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;cin>>n;
ll sum=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
cout<<*max_element(a+1,a+n+1)<<"\n";//定义的是数组时使用数组名,定义的是容器时使用begin函数
cout<<*min_element(a+1,a+n+1)<<"\n";
cout<<fixed<<setprecision(2)<<1.0*sum/n<<"\n";
return 0;
}
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;
int s[10001];
int maxa=0;int mina=100;double sum=0;
double c=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s[i];
maxa=max(maxa,s[i]);
mina=min(mina,s[i]);
sum+=s[i];
}
c=sum/double(n);
cout<<maxa<<endl;
cout<<mina<<endl;
printf("%.2lf",c);
return 0;
}
注:c++如何保留小数:
#include
#include
int main() {
double num = 3.14159;
std::cout << std::fixed << std::setprecision(2) << num << std::endl;
return 0;
}
使用std::fixed和std::setprecision(2)设置输出保留两位小数。
4. 排序
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int a[100];
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
//对数组进行排序
sort(a+1,a+n+1);
//输出
for(int i=1;i<=n;i++)cout<<a[i]<<' ';
return 0;
}
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>a={5,1,3,9,11};
//对数组进行排序
sort(a.begin(),a.end());
//输出
for(auto i:a)cout<<i<<' ';
return 0;
}
#include
using namespace std;
bool cmp(const int &u,const int &v)
{
return u>v;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>a={5,1,3,9,11};
//对数组进行排序
sort(a.begin(),a.end(),cmp);
//输出
for(int i=0;i<a.size();i++)cout<<a[i]<<' ';
return 0;
}
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>a={5,1,3,9,11};
//对数组进行排序
sort(a.begin(),a.end(),[](const int &u,const int &v)//方括号内也可以放&表示引用
{
return u>v;
});
//输出
for(int i=0;i<a.size();i++)cout<<a[i]<<' ';
return 0;
}
struct Node
{
int u,v;
bool operator < (const Node &m)const//这里可以把perator < 整体看做一个函数名
{
return u==m.u?v<m.v:u<m.u;//以u为第一关键字,v为第二关键字
}
}
#include
using namespace std;
const int N=5e5+3;
int a[N];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;
cin>>n;
for(int i=1;i<=n;++i)cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;++i)cout<<a[i]<<" \n"[i==n];//到第n个的时候输出一个换行
for(int i=n;i>=1;--i)cout<<a[i]<<" \n"[i==1];//当i等于1的时候跟上一个回车
return 0;
}
注:12,13行后面的字符判断"\n"之前有一个空格一定要记得打上。
#include
using namespace std;
const int N=5e5+3;
int a[N];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;
cin>>n;
for(int i=1;i<=n;++i)cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;++i)cout<<a[i]<<" \n"[i==n];//到第n个的时候输出一个换行
//当i等于1的时候跟上一个回车
sort(a+1,a+n+1,[](const int &u,const int &v)
{
return u>v;
});
for(int i=1;i<=n;++i)cout<<a[i]<<" \n"[i==n];
return 0;
}
、、2、
#include
using namespace std;
const int N=5e5+3;
int a[N];
bool cmp(const int &u,const int &v)
{
return u>v;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;
cin>>n;
for(int i=1;i<=n;++i)cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;++i)cout<<a[i]<<" \n"[i==n];//到第n个的时候输出一个换行
//当i等于1的时候跟上一个回车
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;++i)cout<<a[i]<<" \n"[i==n];
return 0;
}
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>nums={1,2,3};
cout<<"初始的数组:";
for(int num:nums)
{
cout<<num<<" ";
}
cout<<endl;
//生成下一个排列
while(next_permutation(nums.begin(),nums.end()))
{
cout<<"下一个排列是:";
for(int num:nums)
{
cout<<num<<" ";
}
cout<<endl;
}
return 0;
}
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>nums={3,2,1};
cout<<"初始的数组:";
for(int num:nums)
{
cout<<num<<" ";
}
cout<<endl;
//生成下一个排列
while(prev_permutation(nums.begin(),nums.end()))
{
cout<<"下一个排列是:";
for(int num:nums)
{
cout<<num<<" ";
}
cout<<endl;
}
return 0;
}
补充:全排列一般使用搜索(dfs)
应用:
#include
using namespace std;
int a[10];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
for(int i=1;i<=4;++i)
a[i]=i;
bool tag=true;
while(tag)
{
for(int i=1;i<=4;++i)cout<<a[i]<<' ';
cout<<'\n';
tag=next_permutation(a+1,a+1+4);
}
return 0;
}
注:next_permutation 函数用于生成给定范围内的下一个排列。如果成功生成了下一个排列,则返回 true,并将数组 a 更新为新的排列;否则,如果没有更多的排列可用,则返回 false。由此tag实现对循环的控制。
6. 其他库函数
#include
using namespace std;
int a[10];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int a[5];
memset(a,1,sizeof(a));//设置成0和-1没有影响
//-1的补码是全1的。
for(int i=0;i<5;++i)cout<<bitset<32>(a[i])<<'\n';//产看a[i]的二进制
return 0;
}
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>vec={1,2,3,4,5};
reverse(vec.begin(),vec.end()) ;
for(int num:vec)
cout<<num<<" ";
cout<<endl;
return 0;
}
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>vec={1,1,2,2,3,3,4,4,5,5};
auto it=unique(vec.begin(),vec.end());//unique 函数会将相邻的重复元素移动到向量的末尾,并返回一个指向去重后最后一个元素的下一个位置的迭代器。
vec.erase(it,vec.end());//vec.erase(it,vec.end()); 这行代码的作用是删除从迭代器 it 开始到向量 vec 末尾的所有元素。
for(int num:vec)
{
cout<<num<<" ";
}
cout<<endl;
return 0;
}
//定义数组的形式:
#include
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int vec[]={1,1,2,2,3,3,4,4,5,5};
int n=unique(vec,vec+10)-vec;//减去a最后得到的是下标
for(int i=0;i<n;i++)
cout<<vec[i]<<' ';
return 0;
}