快速入门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*/

STL的使用