计算机专业的同学们接触的第一门语言基本都是C语言,而在做题的时候明显感觉C语言相对原始,而且输入输出格式要求严格。对于想提高自身编程水平的同学们而言,去主流OJ平台上刷题必不可少。以洛谷为例,当你打开题解时,发现基本都是采用C++编写的题解。
因此,本蒟蒻通过3个月学习C语言的经历分享我的观点:初步学完C语言,是候选择C++了!
正如上文所言,C语言相对原始,而C++有更多好用方便的函数,对于输入输出也没有那么严格,做题更加方便。那么本文就是告诉各位如何速成C++,用C++更愉快地做题。
事先声明,本人为一名普通的计算机专业学生,仅在Codeforces与洛谷上有了一点OJ刷题经验,根据课堂及自学内容总结出以下经验贴,如有错误,欢迎各路大佬指正!
其实,C语言与C++只有两个主要区别,而速成C++仅需改变这两个地方:
1、头文件区别:
C语言新手常用头文件:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
而换为C++,则需要变为:
#include<iostream>
#include<algorithm>
//以下为c语言头文件,意味着c++可以沿用c语言的语法
#include<cstdio>
#include<cmath>
#include<cstring>
//头文件后需加上这一句
using namespace std;
或者C++提供了一统头文件的万能头:
注意:该头文件在Dev C++默认带有,牛客、洛谷、Codeforces等主流OJ平台也能使用,但在Visual Studio则需自行添加该头文件
#include<bits/stdc++.h>
2、输入输出区别:
C语言使用格式化输入输出:
以输入一个整数a为例
scanf("%d",&a);
printf("%d",a);
C++的输入输出:
cin>>a;
cout<<a<<endl;
//endl可以理解为换行符,作用约等于'\n',不加也行即cout<<a;
同时,C++能沿用C语言的语法,例如scanf、printf也可在C++编译器下使用(需要添加cstdio头文件),除输入输出外,其他基础语法C++与C语言基本没有区别,也就是C语言怎么写的,C++还是怎么写。
(Tip:C语言某些函数在C++编译器下可能会出错,如gets())
说完主要区别,接下来我将介绍几个常用且快捷的函数!
C++更方便快捷的函数:
//比较函数:
max(a,b)//返回较大值
min(a,b)//返回较小值
//交换函数:
swap(a,b)//交换a、b位置
//排序函数:时间复杂度为O(nlogn)
sort(begin, end, cmp)
//sort函数里的begin指数组首位元素下标,end指末位元素下标
//注意:cmp函数可以没有,即默认从小到大排序
//若需要自定义排序规则则需要编写bool类型返回值的cmp函数
这里使用C语言则需要手搓函数实现上述功能,此处可以做一个对比:
//输出较大值
int max(int a,int b){
return a>b?a:b;
}
//输出较小值
int min(int a,int b){
return a<b?a:b;
}
//交换函数的两种写法,还得用指针ToT
void swap1(int *a,int *b){
int t=*b;
*b=*a;
*a=t;
}
void swap2(int &a,int &b){
int t=a;
a=b;
b=t;
}
//至于排序,以时间复杂度能为O(nlogn)的快速排序为例
void quick_sort(int *a,int left,int right)
{
int key,l=left,r=right;
key=a[(l+r)/2];
while(l<=r)
{
while(a[l]<key)l++;
while(a[r]>key)r--;
if(l<=r)
{
swap(a[l],a[r]);
l++;r--;
}
}
if(left<r) quick_sort(a,left,r);
if(right>l) quick_sort(a,l,right);
}
你愿意选择哪种?
代码实战:
大家可以参考以下例题,展示三个常用函数的使用。
例:输入两个数,比较大小,交换位置;输入一个数组,从小到大排序;
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int main(){
int a,b;cin>>a>>b;
int num[5];
//比较大小
int mx=max(a,b);//mx表示最大值
int mn=min(a,b);//mn表示较小值
cout<<"max="<<mx<<" "<<"min="<<mn; //输出较大较小值,用空格间隔
cout<<endl;//用于换行
//交换位置
int c,d;cin>>c>>d;
cout<<"c="<<c<<" "<<"d="<<d<<endl;
swap(c,d);
cout<<"c="<<c<<" "<<"d="<<d;
cout<<endl;//用于换行
//数组元素排序
for(int i=0;i<5;i++){
cin>>num[i];
}
sort(num,num+5);
for(int i=0;i<5;i++){
cout<<num[i]<<" ";
}
system("pause");//无关紧要,不加也行
return 0;
}
输出结果:
写在最后:除了以上常用的函数,更有方便快捷的STL容器可以帮助实现C语言中较难实现的数据结构等,C++给的实在太多了~
请注意:C++使用的cin,cout的输入方式也并非完美,存在性能上的问题,而至于如何优化请各位读者自行研究或是参考别的大佬的文章。
本人第一篇博客,完结撒花~