文章目录
一、前言
-
因为自己平时是做JavaWeb方向的,在写一些算法的时候,Java运行的速度远低于C++,并且Java代码过于复杂,代码量也高。在一些算法网站上也是普遍采用C++,所以这里学习C++来便于算法的学习(需要有c语言的基础).
-
C++中包含了C语言标准库的移植版本,C标准库的头文件xxx.h基本上编程了xc。例如:stdio.h—>cstdio、math—>cmath、string—>cstring 。
二、C++标准输入输出
2.1 输出
-
包含头文件#include
-
cout是一个标准输出流对象(变量),代表控制台窗口。
-
<< 是一个输出流运算符,假如o是一个输出流对象。x是一个数据o<<x
-
cout是标准名字空间std的一个名字。必须加上名字空间限定std. std::cout。
- 也可以**用using namespace std;**直接引入整个名字空间来代替
-
代码演示
-
#include<iostream> using namespace std; int main() { cout << "nihao"; return 0; }
-
2.2输入
-
格式 cin >> xxx。(PS:这里endl表示换行符)
-
代码演示
-
#include<iostream> using namespace std; int main() { int a , b ,c ,d ; cin >> a >> b >> c >> d ;//表示输入多个数据 cout << a << endl; return 0; }
-
三、引用变量(&运算符)
-
引用变量是其它变量的别名。如同一个人的外号或小名。
-
既然是引用,定义引用变量时就必须要指明其引用的是哪个变量,类型也必须要匹配。
- int a = 3;
- int &r = a;
-
修改引用变量的值,其原先的值也会发生改变,可以用来写交换函数。
-
eg:
#include<iostream> using namespace std; int main() { int a =3,&r = a; cout << a << '\t' << r << endl; r = 5; cout << a << '\t' << r << endl; return 0; }
-
四、函数的默认形参和重载
4.1形参
- 函数的形参可以有默认值
- void print(char ch ,int n=1);
- 默认形参必须在非默认形参右边,即一律靠右
- add(x=1,y,y,z=3); //错
- add(y,x=1,z=3);//正确
4.2重载(和Java相同)
- C++允许作用域中有同样的函数,只要它们的形参不同即可。
- int add(int x,int y);
- double add(double x ,double y);
五、函数模板(类似于Java的泛型)
-
C++允许使用函数模板,用template关键字增加一个模板头,将数据类型编程类型模板参数。
-
#include<iostream> using namespace std; template<typename T> T add(T x , T y){ return x + y; } int main() { cout << add(1,1); }
六、用户定义类型string和Vector
6.1 string
- string是一个用户自定义类型,表示的是字符串
- string s = “hello”;
- 可以用成员访问运算符.方法string类的成员方法(有很多的字符串处理方法)
- cout << s.size() << endl
- string s1 = s.substr(1,3);
6.2Vector
-
先看一下C++的内在的静态数组
- int arr[] = {1,2,3};//大小固定,以后不能改变。
-
介绍一下Vector
-
是一个向量,类似于数组,但是可以实现动态增长。需要添加头文件
-
也是一个类模板,实例化产生一个类,如vector,产生一个数据元素是int的vector类(向量)。
-
可以通过vector类对象去访问其中的成员
-
同样可以用运算符进行一些运算。
-
#include<iostream> #include<vector> using namespace std; int main() { vector<int> v; v.push_back(3); for(int i = 0 ; i < v.size() ; i++){ cout << v[i] << endl; } //重新定义大小 v.resize(2); }
七、指针和动态内存分配
7.1指针
- 约定:指针就是地址,变量的指针就是变量的地址,可以用取地址运算符&获取一个变量的地址。如 :&var
- 指针变量就是储存指针**(地址)**的变量
- 如:T *p ;//p就是储存“T类型变量的地址”的变量。
- 通过取内容运算符*得到指针所指向的变量的内容。
- 如:*p就是得到p指向的变量。
7.2 内存分配
-
c语言中是采用malloc函数的,在C++中我们采用new关键字。
-
#include<iostream> using namespace std; int main() { //(分配类型 *)malloc(分配元素个数 *sizeof(分配类型)) // 如果成功,则返回该空间首地址,该空间没有初始化,如果失败,则返回0 // int *p = (int *)malloc(sizeof(int)); int *p = new int; *p = 3; cout << p;//0x856b20 cout << *p;//3 delete p;//释放这个空间 return 0; }