所谓全排列就是将一个数据组合拆开重新排列,比如 abc,可重新排序为 acb、bac、bca、cab、cba,通过算法上实现一般就是递归或一个while循环来实现。最近复习算法方面的内容接触到的新的算法,记录一下思路。
模版类实现栈模型的顺序存储
使用模版类实现栈模型的顺序存储需要用到我们之前写好的线性表顺序存储的模版,压栈、出栈、获取栈顶元素、获取栈大小等功能均是使用内部线性表顺序储存的函数实现的。没有什么技术含量,只是将线性表包装了一次。具体代码如下:
模版类实现线性表链式储存
同上一篇文章,我们一样是把以前使用C语言实现的单向链表用模版实现了一次,进一步让我们对模版和C++的封装特性有了了解。对于链表的操作我们不过多介绍了,如果有还不清楚操作的,请看以前介绍链表的文章。
模版类实现线性表的顺序储存
使用模版类来实现线性表的顺序储存将会变的非常简单,我们不必像使用C语言一样,将数据和算法分离时使用非常繁琐的类型转换了,而我们直接使用模版中的typename就可以解决这个问题。具体实现的代码如下,都有详细的标注和测试代码:
STL 常用方法集合
我本想将 STL 中各种容器的实现方法和作用全部写一遍,然后每种容器都发一篇文章,但后来发现这样做的意义不大,在 MSDN 或其他一些帮助文档中,他们比我写的要详细,其实我只需要记住每种容器的常用方法,和在什么场合选择合适的容器。下面这张表是我这里的一些常用方法集合。备用参考。
函数模版与类模版
模版是泛型编程中一种重要的手段,泛型编程意思是让多种数据类型的数据都可以在一个代码段算法中使用。泛型的代表作就是STL。其中模版则是让数据类型参数化,让调用者在使用的时候,多传递一个操作数据的类型便可以调用一份“参数个数相同而类型不同,且函数体相同”的代码段,这个代码段可以让多种数据类型都可以计算出正确的结果。我们首先来看一个常规情况下函数重载的例子。