快速入门C++!😆
目录
前言
在许多比赛中,其他语言像java、python等容易超时,而跟c相比,c++还提供提供了强大的STL(标准模板库),所以学习c++是很有必要的,而且有了c的语法基础,转c++并不是什么难事。
这篇简单的介绍一下:有了c的语法的基础后如何快速学习c++。
头文件
标准头文件 | 说明 | |
---|---|---|
旧式头文件 | 新版 | |
math.h | cmath | 包含数学库函数的函数原型 |
stdio.h | cstdio | 包含标准输入/标准输出库函数的函数原型及使用的信息 |
stdlib.h | cstdlib | 包含将数字变文本、将文本变数字、内存分配、随机数和各种其他工具函数的函数原型 |
string.h | cstring | 包含C语言方式的字符串处理函数原型 |
time.h | ctime | 包含操作时间和日期的函数原型和类型 |
iostream.h | iostream | 包含标准输入/输出函数原型 |
ctype.h | cctype | 包含测试某些字符属性的函数原型和将小写字母变为大写字母、将大写字母变成小写子字母的函数原型 |
assert.h | cassert | 包含增加诊断以帮助程序调试的宏和信息 |
STL | ||
set | 集合 | |
map | 映射单射 | |
string | 字符串类型 | |
vector | 向量 | |
stack | 栈 | |
list | 链表 | |
queue | 队列 |
从上表很容易发现,c++的头文件大部分是在c的头文件前面加c,而后面的 .h则去掉。还有记得在写完所有头文件的后加上using namespace std;
c++的输入输出流
输入:
cin>>name; //name为输入的变量名
int a;
char ch;
double d;
cin>>a>>ch>>d;//不需要控制输入格式,直接输入就可以了
string str;//string类的字符串
getline(cin,str); //整行输入,遇到回车结束
cin>>str; //遇到空格结束
这里提一下:c的输入流,c++也是可以用的,不过在学习c++语法的过程还是先适应适应cin的语法。
输出:
cout<<name; //name为输入的变量名
cout<<a<<ch<<d; //直接输出
cout<<endl; //输出回车
cout<<"我要学c++"; //直接输出字符串
cout<<'c'; //输出单个字符
那我们想控制输出格式咋办,别忘了stdio.h的输出流,c++也能用的哦,头文件改成#include<cstdio>
。这样c有的东西c++也有,不过你要是想用cout来控制输出的格式,也有方法,但cout格式输出有点难记,懒惰的我还是用着printf
来控制输出格式。
algorithm头文件下的常用函数
max(a,b) //返回最大值
min(a,b) //返回最小值
max(a,max(b,c)) //可以嵌套来求多个数的最大值;最小值同理
abs(x) //返回绝对值,参数必须是整数
fabs(x) //楼上老哥不能解决浮点数,我能,看我,我在 #include<cmath>
reverse() //将容器内的元素反转
reverse(it1,it2) //将指针指向的[it1,it2)区间的元素反转
vector<int>v; //定义一个变长数组
reverse(v.begin(),v.end()); //将数组所有的元素反转
reverse(v.begin()+3,v.end()-2); /将[v.begin()+3,v.end()-2)内的元素反转
fill() //把数组或容器中的一段区间填充为相同的值
int a[5];
fill(a,a+5,0) //将a[0]~a[4]均赋值为0
sort
sort也是algorithm头文件下的函数,sort是用来排序的函数,用法灵活,在这分开来写。
//sort也需要使用#include<algorithm>头文件,别忘了加using namespace std;
int a[5]={3,1,0,6,2};
sort(a,a+5); //一句代码搞定
//sort默认是从小到大排序的,排序后打印输出为:0 1 2 3 6
那问题来了,怎么实现从大到小排序呢?这里就需要借助比较函数cmp来制定排序规则。
int cmp(int x,int y){ //定义比较函数的排序规则
return x>y; //从大到小
}
int a[5]={3,1,0,6,2};
sort(a,a+5,cmp);
//打印为 6 3 2 1 0
sort的进阶使用: 先给出排序规则:统计学生的成绩,按总分从大到小输出,如果总分相等则按数学的分数从大到小排序,如果数学分数还相等,则按姓名非降序输出。
#include<iostream>
#include<algorithm>
using namespace std;
struct student{
char name[5];
int math;
int english;
int score;
}p[50];
int cmp(struct student x,struct student y){
if(x.score!=y.score)return x.score>y.score; //如果总分不等则按总分从大到小排序
else if(x.math!=y.math)return x.math>y.math; //如果总分相等,则按数学分数从大到小排序
else return x.name<y.name; //如果总分,数学分数都相等,则按名字升序排序
}
int main(){
int N=4;
for(int i=0;i<N;i++){
cin>>p[i].name>>p[i].math>>p[i].english;
p[i].score=p[i].math+p[i].english;
}
sort(p,p+N,cmp);
for(int i=0;i<N;i++)cout<<p[i].name<<' '<<p[i].score<<endl;
return 0;
}
/*输入样例:
a 90 80
b 91 79
c 80 90
d 70 80
输出样例:
b 170
a 170
c 170
d 150*/