一、基本用法
类模板是用来生成类的蓝图,声明的方法都和函数模板类似:
|
1 2 3 4 5 6 |
template <typename T> class CTest { CTest(); ~CTest(); }; |
类模板是用来生成类的蓝图,声明的方法都和函数模板类似:
|
1 2 3 4 5 6 |
template <typename T> class CTest { CTest(); ~CTest(); }; |
模板是 C++中一个重要的部分,也是泛型编程的基础,一个模板就是一个创建类或函数的蓝图,使用它在很多时候都能给我们带来巨大的便利。
定义一个函数模板的语法为:
|
1 2 3 4 5 6 7 |
template <typename T> int compare(const T &v1, const T &v2) { if (v1 < v2) return -1; else if (v1 > v2) return 1; else return 0; } |
模板以关键字 template 开始,后面跟一个模板参数列表,和函数的形参一样,参数列表可以是多个以逗号隔开的一个或多个参数,外部用<> 包起来。
T 代表一种数据类型,可以为任意的内置类型或自定义类,只要该类型实现了函数重载,就可以通过 compare() 函数进行比较。
0x01 介绍 C++类中有两种方式可以用来初始化成员变量,一种最常见的是在构造函数内部直接对成员函数赋值:
|
1 2 3 4 5 6 7 |
class CTest{ int m_a, m_b; CTest(int a, int b){ m_a = a; m_b = b; } } |
另外一种方式就是通过构造函数的初始值列表来完成初始化:
|
1 2 3 4 |
class CTest{ int m_a, m_b; CTest(int a, int b) : m_a(a), m_b(b){} } |
这 ... 阅读更多
一、原理 冒泡排序的原理很简单, 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序 (如从大到小、首字母从从 Z 到 A) 错误就把他们交换过来。 冒泡排序是一种稳定的排序算法。 冒泡排序不管在什么情况下,时间复杂度都是 O() 。 对比插入排序来说,在平均的情况下,插入排序性能是冒泡排序的两倍。 ... 阅读更多
一、原理 选择排序 (Selection sort) 是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小 (或最大) 的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小 (大) 元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序 ... 阅读更多
从排序序列的第二个元素开始,依次往前面查询,知道找到一个合适的位置就把它插进去。每个元素在交换完成之后 [0, n] 都是一个有序序列,它的时间复杂度为 O(n^2)。
排序逻辑:
|
1 2 |
for i in (1, n-1) 使用 data[i]前向查找,找到一个合适的位置插入 |
一、原理 选择排序的原理是分治,把排序序列切分成若干个小组后分别排序。每次排序都以随机的一个元素作为哨兵 (一般都以排序区间的中间元素或者首元素作为哨兵),比他大的元素都放到右边,比它小的都放到左边。然后分别对该元素左边和右边的元素再法排序,直到所有的元素都是有序状态。 具体的排序过程描述为: 选取一 ... 阅读更多
python 可以通过 random 包来产生随机数或者执行一些随机操作。
给定一个数据作为随机数种子,和大多数语言一样,python 也可以使用时间来作为随机数种子。
对于普通的变量,python 函数的值传递过程和大多语言一样都是传递参数的副本,函数体内修改参数值不会对外部传参生效:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
def f1(j): j = 9999 def main(): i = 1 f1(i) print i # 输出 1 if __name__ == "__main__": main() |