摘要: 一. 背景 在现实生活中,解决一个问题可以有多种方法,其中有好的方法,也有较为一般的方法。评判标准虽有不同,但总体思想是:用最小的代价获得最多的收益。 这里所说代价并不仅指金钱开销,有时也包括时间,所耗费资源等。 计算机程序也是为了解决问题而编写的。同理可知,程序有好的,也有一般的,评判标准主要有两 阅读全文
posted @ 2020-02-01 09:31 Hello_Nolan 阅读(646) 评论(0) 推荐(0) 编辑
摘要: 1. 应对所有队列操作进行并发控制以保证数据的正确性,比如可以采用信号量的方法。 2. 实现一种抽象数据类型之前,应该对其作出针对性的考察。 阅读全文
posted @ 2020-01-28 06:09 Hello_Nolan 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 1. 在仅允许操作当前数据而又需要不断回溯历史数据的场景中,栈是最佳抽象数据类型。 2. 一般用序列容器 deque 来实现栈,它的效率和花销较为均衡。 阅读全文
posted @ 2020-01-28 00:40 Hello_Nolan 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 1. 数组不能随着问题规模的增大而增加,而动态分配的数组需要手动管理内存,于是 vector 应运而生。 2. 向量所使用的内存来自动态存储区,由系统动态管理。 3. 一般应该传递引用或常量引用形式,避免进行大量复制操作。 4. 当能够预知向量最终长度时,应该直接指定长度,而不要连续使用 push_ 阅读全文
posted @ 2020-01-27 02:29 Hello_Nolan 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 1. 内存的每一个字节都有一个地址,变量的地址是首字节的地址。(比如一个 int 类型有 4 个字节,但是将第一个字节的地址作为整个变量的地址) 2. 数组名是一个常量指针。 3. 用 nullptr 来指示一个无效的内存地址。 4. 给函数传递指针,与传递引用可以起到相同的效果。但是引用比指针更容 阅读全文
posted @ 2020-01-25 23:04 Hello_Nolan 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 暂无 阅读全文
posted @ 2020-01-24 03:49 Hello_Nolan 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 1. 数组的大小声明符必须是一个常数或常量表达式。如果省略大小声明符,则必须提供一个初始化列表。 2. 如果数组被部分初始化,那么其余部分会自动被设置为 0 。 3. 基于范围的 for 循环可用于需要遍历数组所有元素的情形。但是需要使用数组下标时,就不能使用了。 4. 复制数组时,必须对元素进行逐 阅读全文
posted @ 2020-01-23 23:08 Hello_Nolan 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 1. 面向过程编程是一种以执行程序操作的过程或函数为中心的方法。 2. 应该始终应大写字母作为类的开头。 3. 成员变量通常被设为私有,用来对它进行保护。然后创建公共函数,以便允许类外的代码进行访问。 4. 当一个类函数定义在类声明中时,被称为内联函数。内联函数通常很简短。 5. 内联函数将代码直接 阅读全文
posted @ 2020-01-23 02:09 Hello_Nolan 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 1. 算法与数据结构应该以巧妙的方式结合起来,达到解决问题的目的,并提高效率。 2. 数据的静态组织和动态的操作算法,构成了ADT。一旦选择了某种数据结构,ADT的性能也可以确定。由此得知,抽象数据类型的挑选本质上是确定其数据结构。 3. 用数组存放数据,会出现空间超出不够用或浪费用不完的情况(即使 阅读全文
posted @ 2020-01-22 23:49 Hello_Nolan 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 1. 不能简单的看语句的执行次数,时间复杂度才是评判标准。有时候粗看一种方案的某些语句执行较少,但实际上在大量数据操作时,时间复杂度便会较高。 2. 空间复杂度并不是简单的累加,而是要考虑算法执行过程中空间所能达到的最大用量。 3. 对固定的分支进行暴力搜索,一般会导致指数时间。组合算法一般有阶乘时 阅读全文
posted @ 2020-01-21 20:21 Hello_Nolan 阅读(96) 评论(0) 推荐(0) 编辑