我们通常认为一个类有两种不同的用户:普通用户 和 类的实现者。其中,普通用户编写的代码使用类的对象,这部分代码只能访问类的公有(接口)成员;实现者则负责编写类的成员和友元的代码,成员和友元既能访问类的公有部分,也能访问类的私有部分。如果进一步考虑继承的话就会出现第三种用户,即派生类。派生类可以访问基类的公有(public)成员和受保护(protected)成员,但不能访问基类的私有(private)成员。
C++与C的那些差异
虽说C++是向后兼容C的,但C++与C还是存在许多差异。这里举了几个例子,也是我们很容易忽略的地方。如果你还知道其他的更多的Differences,或者发现什么错误,可以评论告诉我,大家一起学习进步。另外,随着学习的进行,本文会持续更新……
C编译通过但C++编译不通过
C++学习之extern关键字
我们知道,extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。另外,extern还可以与”C”连用,作为链接指示。
C++名字修饰(Name Mangling)
深度优先搜索的实现
图的遍历是指从图中的某一个顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问一次。注意到树是一种特殊的图,所以树的遍历实际上也可以看作是一种特殊的图的遍历。图的遍历主要有两种算法:广度优先搜索(Breadth-First-Search)和深度优先搜索(Depth-First-Search)。
深度优先搜索(DFS)的算法思想
广度优先搜索的实现
图的遍历是指从图中的某一个顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问一次。注意到树是一种特殊的图,所以树的遍历实际上也可以看作是一种特殊的图的遍历。图的遍历主要有两种算法:广度优先搜索(Breadth-First-Search)和深度优先搜索(Depth-First-Search)。
广度优先搜索(BFS)的算法思想
Cocos2d-JS入门之2048游戏
介绍
Cocos2d-JS是Cocos2d-x的Javascript版本,它的前身是Cocos2d-html5。在3.0版本以前叫做Cocos2d-html5,从3.0版本开始叫做Cocos2d-JS。我们知道Cocos2d-x支持使用C++、Lua、Javascript来进行程序开发,其所内置的是一个Javascript引擎,通过用C++解析Javascript去执行;而Cocos2d-html5是使用Javascript进行开发,最终运行在浏览器里的。那么在v3.0的时候,Cocos2d-html5和Cocos2d-x JSBinding被合到了一起,称作Cocos2d-JS。
第K顺序统计量的求解
一个n个元素组成的集合中,第K个顺序统计量(Order Statistic)指的是该集合中第K小的元素,我们要讨论的是如何在线性时间(linear time)里找出一个数组的第K个顺序统计量。
问题描述
问题:给定一个含有n个元素的无序数组,找出第k小的元素。
- k = 1 :最小值
- k = n :最大值
- k = ⌊(n+1)/2⌋ or ⌈(n+1)/2⌉ :中位数
线性时间的排序算法
前面已经介绍了几种排序算法,像插入排序(直接插入排序,折半插入排序,希尔排序)、交换排序(冒泡排序,快速排序)、选择排序(简单选择排序,堆排序)、2-路归并排序(见我的另一篇文章:各种内部排序算法的实现)等,这些排序算法都有一个共同的特点,就是基于比较。本文将介绍三种非比较的排序算法:计数排序,基数排序,桶排序。它们将突破比较排序的Ω(nlgn)下界,以线性时间运行。
快速排序的分析与优化
快速排序的介绍
快速排序是一种排序算法,对包含n个数的输入数组,最坏的情况运行时间为Θ(n^2)[Θ读作theta]。虽然这个最坏情况的运行时间比较差,但快速排序通常是用于排序的最佳的实用选择。这是因为其平均情况下的性能相当好:期望的运行时间为Θ(nlgn),且Θ(nlgn)记号中隐含的常数因子很小。另外,它还能够进行就地排序,在虚拟内存环境中也能很好的工作。
和归并排序一样,快速排序也是基于分治法(Divide and conquer):