第一部分
类型选择
- 数值不为负使用无符号类型
- 数值超过int表示范围用long long
- 浮点运算用double
列表初始化
如
1 | int units{0}; |
声明与定义
1 | //声明: |
多个文件用同一个变量时可以有多个声明但是只能有一个定义
声明后赋值将变成定义
引用
在定义引用时程序把引用和初始值绑定,所以必须初始化
“引用即别名”,为引用赋值实际上是把值赋给了与引用绑定的对象。获取引用的值实际上是获取与引用绑定对象的值。
引用类型初始值必须是对象
1 | int &ref = 4//错误 |
指针
指针定义
指针存放某个对象的地址,要想获取地址需要使用取地址符&
1 | double dval; //dval是double类型变量 |
指针的值应该是4种状态之一:
- 指向一个对象
- 指向紧邻对象所占空间的下一个位置
- 空指针,没有指向任何对象
- 无效指针,上述情况以外
利用指针访问对象
指针指向一个对象时可以用解引用符*来访问该对象
1 | int ival = 42; |
复合类型写法
有两种写法:
1.int* p;
着重强调本次定义了一种复合类型
2.int *p;
着重强调变量具有的复合类型
复杂声明语句从右向左阅读,离变量名最近的符号对变量类型有最直接影响
Const
默认只能在一个文件内使用,要想共享需要在声明的时候在前边加extern
const指针:int *const curErr = &errNumb;
头文件保护符
1 |
String
需引入string头文件
定义
可以使用string s(10,'c')
,s是cccccccccc
可以使用string('qwe')
方法
s.size(),s1+s2,s.empty()
cin>>s,遇到空格停
1 | for(auto s:str) |
Vector
需要#include
定义
可以用小括号或大括号,大括号是列表初始化,小括号可以定义重复元素或者指定大小
用大括号时会尽可能把值当成初始值来处理,不行的时候尝试圆括号初始化方式。
一般来讲,初始化适用于以下三种:
- 初始值已知且较少
- 初始值是另一个vector副本
- 重复初始值
方法
添加元素:v.push_back()
v.empty()
v.size()
迭代器
有迭代器的类型都有begin和end方法,C++11新引入了cbegin和cend方法返回const类型
*iter返回所指元素的引用
运算时加减整数仍然是一个迭代器,进行了一些移动。两个迭代器相减得到他们的距离
数组
定义
1 | int arr[10];//10个大小的数组 |
数组与指针
1 | string nums[] = {'q','w','e'}; |
标准库函数begin(s),end(s)返回指向的指针
1 | int *beg = begin(ia); |
获得大小可以使用sizeof()
多维数组
初始化
1 | int ia[3][4] = {0};//全0 |
跳转语句
break
终止离他最近的while,do while,for和switch语句。
continue
终止最近的循环中的当前迭代并立刻开始下一次迭代,只能出现在for和while内部
函数
函数内静态对象
函数内定义的static对象只初始化一次,可以用来计数函数进行次数