0%

数据结构与算法分析学习笔记

第一章 程序设计:综述

1.3 递归简论

编写递归程序时,要牢记递归的四条基本法则:

  • 基准情形
  • 要有进展
  • 设计法则
  • 合成效益法则

1.5 C++细节

1.5.1 指针

指针变量是一种存放另一对象所占用的地址的变量。例如如下例程:

1
2
3
4
5
6
7
8
9
int main() {
IntCell* m;
m = new IntCell(5);
m->write(5);
cout << "Cell contents: " << m->read() << endl;

delete m;
return 0;
}
  • 声明

其中,星号*表明m是一个指针变量,允许他指向一个IntCell对象。m的值是他所指向的对象的地址。

  • 对象的动态创建

操作符new返回一个指向新创建对象的指针。

  • 垃圾收集与delete

当一个通过new操作符被分配地址的对象不再被引用时,必须(通过一个指针)对该对象应用delete操作,否则该对象使用的内存就会丢失。一个重要的规则是,在能够使用自动变量的时候不要使用new操作符。

  • 指针的赋值和比较

在C++中,指针变量的赋值和比较是基于指针的值,也即基于指针所存储的内存地址进行的。于是,如果他们指向相同的对象,两个指针变量相等,如果他们指向不同的对象,即使他们指向的两个对象本身是相等的,其值也是不相等的。

  • 通过指针访问对象的成员

如果一个指针变量指向一个类类型的对象,那么所指对象的(可见)成员能够通过->操作符被访问。

1.5.2 左值、右值和引用

如果程序中有一个变量名,那么他就是一个左值。

在C++11中,左值引用 的声明是通过在某个类型后防止一个符号 & 来进行的。右值引用 是通过在某个类型后面放置一个 && 来进行的。

左值引用的用途

1、给结构复杂的名称起别名

2、范围for循环

3、避免复制