第一部分

image-20220126083059360

类型选择

  1. 数值不为负使用无符号类型
  2. 数值超过int表示范围用long long
  3. 浮点运算用double
image-20220126083553646

列表初始化

1
2
3
4
int units{0};
int units(0);
int units = 0;
int units = {0};

声明与定义

1
2
3
4
//声明:
extern int i
//定义
int j

多个文件用同一个变量时可以有多个声明但是只能有一个定义

声明后赋值将变成定义

引用

在定义引用时程序把引用和初始值绑定,所以必须初始化

“引用即别名”,为引用赋值实际上是把值赋给了与引用绑定的对象。获取引用的值实际上是获取与引用绑定对象的值。

引用类型初始值必须是对象

1
int &ref = 4//错误

指针

指针定义

指针存放某个对象的地址,要想获取地址需要使用取地址符&

1
2
3
4
5
double dval; //dval是double类型变量
double *pd = &dval;//pd是指向dval的double型指针
double *pd2 = pd;//pd2是指向pd的double型指针
int *pi = pd;//错误,pi类型与pd不匹配
pi = &dval//错误,试图把double类型对象地址赋给int型指针

指针的值应该是4种状态之一:

  1. 指向一个对象
  2. 指向紧邻对象所占空间的下一个位置
  3. 空指针,没有指向任何对象
  4. 无效指针,上述情况以外

利用指针访问对象

指针指向一个对象时可以用解引用符*来访问该对象

1
2
3
int ival = 42;
int *p = &ival;//p里存着ival的地址
cout << *p;//用*解引用得到p指针所指对象

复合类型写法

有两种写法:

1.int* p;

着重强调本次定义了一种复合类型

2.int *p;

着重强调变量具有的复合类型

复杂声明语句从右向左阅读,离变量名最近的符号对变量类型有最直接影响

Const

默认只能在一个文件内使用,要想共享需要在声明的时候在前边加extern

const指针:int *const curErr = &errNumb;

头文件保护符

1
2
3
4
#ifdef aaa //如果aaa已定义为真
#ifndef aaa ///如果aaa未定义为真
#define aaa
#endif

String

需引入string头文件

定义

可以使用string s(10,'c'),s是cccccccccc

可以使用string('qwe')

方法

s.size(),s1+s2,s.empty()

cin>>s,遇到空格停

1
2
for(auto s:str)
cout<<s;

Vector

需要#include

定义

可以用小括号或大括号,大括号是列表初始化,小括号可以定义重复元素或者指定大小

用大括号时会尽可能把值当成初始值来处理,不行的时候尝试圆括号初始化方式。

一般来讲,初始化适用于以下三种:

  1. 初始值已知且较少
  2. 初始值是另一个vector副本
  3. 重复初始值

方法

添加元素:v.push_back()

v.empty()

v.size()

迭代器

有迭代器的类型都有begin和end方法,C++11新引入了cbegin和cend方法返回const类型

*iter返回所指元素的引用

运算时加减整数仍然是一个迭代器,进行了一些移动。两个迭代器相减得到他们的距离

数组

定义

1
2
3
4
5
6
int arr[10];//10个大小的数组
int *parr[10];//10个int指针的数组
char a[] = {'q','w','e'};
char a[] = "qwe";
//不可以使用:
char b[] = a;

数组与指针

1
2
3
string nums[] = {'q','w','e'};
string *p = nums; //== p = &nums[0]
//nums其实是指向头元素的指针

标准库函数begin(s),end(s)返回指向的指针

1
int *beg = begin(ia);

获得大小可以使用sizeof()

多维数组

初始化

1
2
3
4
5
6
7
8
9
int ia[3][4] = {0};//全0
int ia[3][4] = {
{1,2,3},
{1,2,3},
{1,2,3}
};
int ia[3][4] = {1,2,3,1,2,3,1,2,3};//与上边的相等


跳转语句

break

终止离他最近的while,do while,for和switch语句。

continue

终止最近的循环中的当前迭代并立刻开始下一次迭代,只能出现在for和while内部

函数

函数内静态对象

函数内定义的static对象只初始化一次,可以用来计数函数进行次数