- 博客(8)
- 收藏
- 关注
原创 Lambda表达式
在C++中,一共有四种可调用对象:函数、函数指针、重载了函数调用运算符的类以及Lambda表达式。 对Lambda的总结如下: 一个Lambda表达式就是一个可调用的代码单元,也相当于一个未命名的内联函数,一个lambda表达式的标准形式: ,可以忽略参数列表和返回类型,但是必须包含捕获列表和函数体,调用方式与普通函数相同。auto
2016-04-12 16:39:27
276
原创 约瑟夫环问题
约瑟夫环: n个数字排成一个圆圈,从数字0开始,每次从这个圆圈中删除第k个数字,求这个圆圈中最后剩下的数字。 我们可以使用标准库中的链表来模拟一个圆环,每次访问到链表的结尾时,重新从头开始访问,知道链表中只剩下最后一个元素,输出结果。 这里写代码片 int lastRemaining(unsigned int n,unsigned int k){if (n < 1 || k < 1){
2016-04-08 19:36:29
279
原创 Head_First 第一章:Strategy Pattern
定义DUCK类来作为一个超类,所有的鸭子类都继承它,但是这不能很好的解决问题,因为鸭子的行为字子类中不停的改变,并且让所有的子类都有这些行为是不恰当的,使用接口,虽然可以解决,但不能解决代码复用的问题,因为接口不具有实现代码,因此: 我们应该找出应用中可能需要变化之处,把他们独立出来,和那些不需要变化的分离开。使得代码变化引起的不经意后果变少,系统更有弹性。 尽量多用组合,少用继承!
2016-04-08 17:54:37
250
原创 归并排序
归并排序: 归并排序的核心思想是采用分治法,对已有序的子序列进行合并,从而得到一个有序的序列。例如:两个已经有序的子序列:2,4,6,8与3,5,7,首先首元素也就是2与3比较,2小于3,把2放到最终的序列中,然后拿第一个序列中的4再与3比较,4大于3,于是把3放入最终的序列中,重复以上过程最终当把7放入最终的序列之后,第一个序列中还有8未放入,将8放入最终的子序列,归并结束,已成为一个
2016-04-08 16:48:14
220
原创 快速排序
快速排序: 对于一个要排序的数组a[0]..a[N]来说,首先从数组中任意选出一个数作为一个标准,把数组中比该数小的都放到他前面,比它大的都放到它后面,这个过程称为一趟快速排序,快速排序不是一种稳定的排序算法,相等元素的相对位置会发生变化。 例如:对于数组a[]={6,2,7,3,8,9}来说: (1)创建变量i=0,指向数组中的第一个元素,j=5
2016-04-08 16:23:05
185
原创 冒泡排序
冒泡排序的基本步骤:(1)从最后的元素开始,相邻元素两两比较,如果前一个大于后一个,则交换(2)对每一对相邻的元素,两两比较,最终第一个位置上的元素即为最小的元素(内循环)(3)重复以上的步骤,但第一个元素除外(外循环)(4)持续对每次越来越少的元素重复以上步骤,直到没有交换为止以上的步骤有一个问题,即使原数组已经是递增排序的,仍然需要比较,因此设置一个标记位flag=
2016-04-06 13:30:42
280
原创 大整数的减法
方法有点LOW:对于两个不确定长度的数进行减法运算,因为长度有可能超过基本数据类型的表达范围,因此我们最好使用字符串来存储,由于长度可能不一致,例如 123,23这两个数,减法运算从右往左进行,对于我们编程实现来说,为了方便控制,最好反转这两个字符串,321,32,这样从字符串的第一个位置开始将字符转为整数(减去‘0’)进行减法运算,在这里分为三种情况:(1)被减数长度大于减数
2016-04-06 11:27:51
960
原创 查找数组中只出现一次的一个数
对于一个数组其中每个数出现了两次,只有一个数出现了一次,找出这个只出现了一次的一个数,这是一个经典的面试题,把数组中的数进行异或运算,出现两次的数异或的结果为0,最终异或的结果就为只出现了一次的一个数。例如:数组元素为3,4,4,3(011)异或4(100)结果为111,111再接着异或4(100),结果为011,即为3。void FindOnlyoneInArray(int a[],in
2016-04-06 10:04:33
3878
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人