本篇博客参考自柳婼大神的《从放弃C语言到使用C++刷算法的简明教程》
文章目录
-
- 1.使用C++刷算法的好处
- 2. 名称空间using namespace std的解释
- 3. cin和cout输入输出
- 4. 关于C++的头文件
- 5. C++的变量声明
- 6. C++特有的bool变量
- 7. C++特有的const定义常量
- 8. C++里面超好用的string类
- 9. C++的结构体struct和C语言结构体的区别
- 10. C++ STL之动态数组vector的使用
- 11. C++ STL之集合set的使用
- 12. C++ STL之映射map的使用
- 13. C++ STL之stack的使用
- 14. C++ STL之队列queue的使用
- 15. C++ STL之unordered_map和unordered_set的使用
- 16. C++的位运算bitset
- 17. C++中的sort函数
- 18. C++中使用sort自定义cmp函数
- 19. 关于cctype头文件里的一些函数
- 20. 关于C++11的解释
- 21. C++11里面很好用的auto声明
- 22. C++11特性中的to_string
- 23. C++11特性中的stoi、stod
- 24. 如何在Dev-Cpp中使用C++11中的函数
- 25. Cpp中保留小数的实现
1.使用C++刷算法的好处
- 在具备C语言的前提下,学习C++并使用它刷算法题的学习成本非常低,只需要几个小时
- C++向下兼容C,C语言里的语法大部分都可以在C++文件中运行,所以学习C++对刷算法时编程语言的表达能力进行扩充有益无害,例如C语言的输入输出(
scanf和printf)比C++快,那么就可以在使用C++刷算法同时使用 scanf 和 printf 提高代码运行效率 - C++拥有丰富的STL标准库,这也是PAT、LeetCode等题目中经常需要用到的,单纯使用C语言解决问题会比使用C++的STL库解决问题麻烦很多
- C++的string非常好用,比C语言里面得到char数组好用很多
- 在解决一些较为简单的PAT乙级题目的时候( 例如一些时间复杂度限制不严格 ),cin、cout输入输出非常方便
2. 名称空间using namespace std的解释
这句话是使用“std”这个名称空间(namespace)的意思,因为有的时候不同⼚商定义的函数名称彼此之间可能会重复,为了避免冲突,就将所有的函数都封装在各⾃的名称空间里面,使⽤这个函数的时候就在main函数前⾯写明⽤了什么名称空间,几乎在C++中使⽤到的⼀些⽅法如cin、cout都是在std名称空间里面的,所以可以看到using namespace std;这句话几乎成了我每段C++代码的标配,就和return 0; ⼀样必须有。其实也可以不写这句话,但是使⽤std里面的方法的时候就会麻烦点,要写成这样:
#include<iostream>
int main ()
{
int n;
std::cin>>n;
std::cout<<"hello ,xuyuanzhi"<<n+1<< std::endl;
return 0;
}
3. cin和cout输入输出
就如同 scanf 和 printf 在 stdio.h 头文件中⼀样,cin 和 cout 在头文件 iostream 里面,看名字就知道,io 是输⼊输出 input和 output的首字母,stream是流,所以这个iostream头文件⾥包含的方法就是管理⼀些输⼊输出流的 cin 和 cout 比较⽅便,不⽤像C语言⾥的scanf、printf 那样写得那样繁琐, cin >> n; 和scanf("%d", &n); 是⼀样的意思,注意cin是向右的箭头,表示将内容输⼊到n中,同样, cout << n; 和 printf("%d", n); ⼀样的意思,此时 cout 是向左的两个箭头,注意和 cin 区分开来。⽽且不管n是 double 还是 int 或者是 char 类型,只⽤写 cin >> n; 和 cout << n; 这样简单的语句就好,不用像C语言中需要根据n的类型对应地写%lf、%d、%c这样麻烦,endl 和 “\n” 是⼀个意思,⼀般如果前⾯是个字符串引号的话直接 “\n” 比较⽅便。
例如:
cout << "hello, ⼩可爱\n";
cout << n << endl;
cin 和 cout 虽然使用起来更⽅便,但是输⼊输出的效率不如 scanf 和 printf 快,如果发现有题目超时了,可以换成 scanf 和 printf 再试一下
4. 关于C++的头文件
C++的头文件⼀般是没有像C语⾔的.h这样的扩展后缀的,⼀般情况下C语言里面的头文件去掉.h,然后在前面加个c就可以继续在C++⽂件中使用c语言头文件中的函数啦
比如:
#include <cmath> // 相当于C语⾔⾥⾯的#include <math.h>
#include <cstdio> // 相当于C语⾔⾥⾯的#include <stdio.h>
#include <cctype> // 相当于C语⾔⾥⾯的#include <ctype.h>
#include <cstring> // 相当于C语⾔⾥⾯的#include <string.h>
5. C++的变量声明
C语言的变量声明⼀般都在函数的开头,但是C++在首次使⽤变量之前声明即可(当然也可以都放在函数的开头),而且⼀般C语言里面会在for循环的外⾯定义i变量,但是C++里面可以在for循环内部定义,而且在for循环里面定义的局部变量,在循环外面就失效啦(就是脱离这个局部作⽤域就会查⽆此变量的意思),所以⼀个main函数里面可以定义好多次局部变量i,再也不⽤担心写的循环太多变量名i、j、k不够⽤啦
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
cout<<"hello,xuyuanzhi"<<n+1<<endl;
int m;
cin>>m;
for(int i=0;i<n;i++){
//这个i只在for循环里面有用,出了这个for循环就失效了
cout<<i;
}
cout<<endl;
for(int i=0;i<m;i++){
cout<<i+2;
}
return 0;
}
6. C++特有的bool变量
bool变量有两个值,false 和 true,以前⽤C语言的时候都是用 int 的0和1表示 false 和 true 的,现在C++里面引⼊了这个叫做 bool(布尔)的变量,⽽且C++把所有非零值解释为 true,零值解释为false,所以直接赋值⼀个数字给bool变量也是可以的,它会自动根据int值是不是零来决定给 bool 变量赋值 true 还是 false。
bool flag = true;
bool flag2 = -2; // flag2为true
bool flag3 = 0; // flag3为false
7. C++特有的const定义常量
const int a = 99999999;
8. C++里面超好用的string类
以前C语言中⽤char[]的⽅式处理字符串很繁琐,现在有了string类,定义、拼接、输出、处理都更加简单啦。
不过string只能⽤ cin 和 cout 处理,无法用 scanf 和 printf 处理:
string s="hello c++";//赋值字符串
string s1=s;
string s2=s+s1; //字符串拼接直接用+号就可以
string s3;
cin>>s3;//读入字符串
cout<<s<<endl<<s1<<endl<<s2<<endl<<s3<<endl;//输出字符串
⽤cin读⼊字符串的时候,是以空格为分隔符的,如果想要读⼊⼀整⾏的字符串,就需要⽤getline,s的长度可以⽤s.length()获取(有几个字符就是⻓度多少,不存在char[]里面的什么末尾的结束符之类的)
string s;//定义一个空字符串s
getline(cin,s);//读取一行的字符串,包括空格
cout<<s<<endl;
cout<<s.length();//输出字符串s的长度
return 0;
string中还有个很常⽤的函数叫做substr,作⽤是截取某个字符串中的⼦串,用法有两种形式:
string s2 = s.substr(4); // 表示从下标4开始⼀直到结束
string s3 = s.substr(5, 3); // 表示从下标5开始,3个字符
9. C++的结构体struct和C语言结构体的区别
定义好结构体stu之后,使⽤这个结构体类型的时候,C语⾔需要写关键字struct,⽽C++⾥⾯可以省略
不写:
struct stu {
int grade;
float score;
};
struct stu arr1[10]; // C语⾔⾥⾯需要写struct
stu arr2[10];// C++⾥⾯不⽤写
这个引⽤符号&要和C语⾔⾥⾯的取地址运算符&区分开来,他们没有什么关系,C++里面的引⽤是指在变量名之前加⼀个&符号,⽐如在函数传⼊的参数中int &a,那么对这个引⽤变量a做的所有操作都是直接对传入的原变量进⾏的操作,并没有像原来int a⼀样只是拷⻉⼀个副本(传值),举两个例子:
void func(int &a) {
// 传⼊的是n的引⽤,相当于直接对n进⾏了操作,只不过在func函数中换了个名字叫a
a = 99;
}
int main() {
int n = 0;
func(n); // n由0变成了99
}
void func(int a) {
// 传⼊的是0这个值,并不会改变main函数中n的值
a = 99;
}
int main() {
int n = 0;
func(n

本文详细介绍使用C++进行算法刷题的优势与技巧,涵盖C++基础语法、STL容器应用及C++11新特性等内容,助你高效提升算法水平。
最低0.47元/天 解锁文章
530

被折叠的 条评论
为什么被折叠?



