从c升级到c++速成

一、格式上的差别

c语言的标准代码格式一般为:

#include<stdio.h>
int main(){
    int a,b;
    scanf("%d%d",&a,&b);//输入
    printf("%d%d",a,b);//输出
}

换成c++后

#include<iostream>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;//输入
    cout<<a<<b;//输出
}

然后一些头文件的变化

#include<stdio.h>  => #include<cstdio>
#include<math.h>   => #include<cmath>
#include<string.h> => #include<cstring>

回车的使用

cout<<1<<endl<<2; 或者  cout<<1<<'\n'<<2;   都是可以的

效果展示:

#include<iostream>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    cout<<"第一种:\n"<<a<<endl<<b;
    cout<<endl;
    cout<<"第二种:\n"<<a<<'\n'<<b;
    cout<<endl;
    cout<<"输出字符、字符串、数字:\n"<<'a'<<' '<<"abcde"<<' '<<10086;//字符串用双引号单个字符用单引号
    return 0;
}//源代码

二、常见的操作

保留小数位数

必要头文件: 
#include<iomanip>
输出方式
cout<<fixed<<setprecision(x)<<sum<<endl;//x为要保存的小数位数,如保留两位小数就填2,sum为要保留的数,填变量名或者浮点数都可以

是不是比较麻烦?所以一般这里都不用c++的方法,完全可以使用c语言的printf格式化输出,记得添加一个头文件#include<cstdio>就行了

对数组快速排序

必要头文件:
#include<algorithm>
排序方法
sort(a,a+n);//a为数组的名字,n为数组的元素个数,如果你的数组下标是从1开始的,就需要修改为sort(a+1,a+n+1);
排序完后的数组内的元素是从小到大的

字符串数据结构string

详见https://blog.csdn.net/weixin_52115456/article/details/126020932

万能头文件

#include<bits/stdc++.h>
这个头文件几乎囊括了算法竞赛所有用得到的头文件,也就是说只需要这一个头文件别的头文件都可以不用打了,但是编译器可能会由于版本太老之类的问题不能使用,不过绝大多数题都可以放心使用

三、进阶使用——STL

c++拥有着众多的数据结构类型,以后可能会用到的有stack、queue、map、vector、priority_queue等。

stack

定义

std::stack<std::string, std::list<std::string>> fruit;

常用函数

top()//返回一个栈顶元素的引用
push(const T& obj)//将对象副本压入栈顶
pop()//弹出栈顶元素
size()//返回栈中元素的个数
empty()//在栈中没有元素的情况下返回 true

map

定义

map<typename1, typename2> mp;

迭代器访问元素

for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++)

常用函数

find(key) //返回键为key映射的迭代器
erase(it)||erase(first,last)//1、删除单个元素。2、删除一个区间内所有的元素
size()//获得map中映射的对数
clear()//清空map中的所有元素

queue

定义

std::queue<std::string> words;

常用函数

front()//返回 queue 中第一个元素的引用
back()//返回 queue 中最后一个元素的引用。
push(const T& obj)//在 queue 的尾部添加一个元素的副本
pop()//删除 queue 中的第一个元素。
size()//返回 queue 中元素的个数。
empty()//如果 queue 中没有元素的话,返回 true

vector

初始化

vector<int> a(10);//定义了10个整型元素的向量
vector<int> a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
vector<int> a(b); //用b向量来创建a向量,整体复制性赋值
vector<int> a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素

重要操作

a.assign(b.begin(), b.begin()+3); //b为向量,将b的0~2个元素构成的向量赋给a
a.assign(4,2); //是a只含4个元素,且每个元素为2
a.back(); //返回a的最后一个元素
a.front(); //返回a的第一个元素
a[i]; //返回a的第i个元素,当且仅当a[i]存在2013-12-07
a.clear(); //清空a中的元素
a.empty(); //判断a是否为空,空则返回ture,不空则返回false
a.pop_back(); //删除a向量的最后一个元素
a.erase(a.begin()+1,a.begin()+3); //删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)
a.push_back(5); //在a的最后一个向量后插入一个元素,其值为5
a.insert(a.begin()+1,5); //在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
a.insert(a.begin()+1,3,5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
a.insert(a.begin()+1,b+3,b+6); //b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8  ,插入元素后为1,4,5,9,2,3,4,5,9,8
a.size(); //返回a中元素的个数;
a.capacity(); //返回a在内存中总共可以容纳的元素个数
a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,其值随机
a.resize(10,2); //将a的现有元素个数调至10个,多则删,少则补,其值为2
a.reserve(100); //将a的容量(capacity)扩充至100
a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换
a==b; //b为向量,向量的比较操作还有!=,>=,<=,>,<

priority_queue

定义

 priority_queue<int> a;//元素从大到小排
 priority_queue<int,vector<int>,greater<int> > a;//元素从小到大排

基本操作

top()://访问队头元素
empty()://队列是否为空
size()://返回队列内元素个数
push()://插入元素到队尾 (并排序)
emplace()://原地构造一个元素并插入队列
pop()://弹出队头元素
swap()://交换内容

四、要学的算法

这个与c/c++无关,单纯就是需要学的算法, 大概有GCD(最小公倍数)、素数筛法、并查集,高精度加法等等,具体模板详见常用简单模板


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至1004454362@qq.com