
C++
文章平均质量分 65
Alps1992
我希望自己变得更优秀。
展开
-
算法学习-数据结构之链表操作,创建,插入,删除,查找。
链表算是一个最简单的数据结构了。这里原创 2014-07-25 22:59:57 · 1282 阅读 · 0 评论 -
c++学习 - int 和 string 的相互转换
在C++中会碰到int和string类型转换的。string -> int首先我们先看两个函数:atoi这个函数是把char * 转换成int的。应该是属于标准库函数。在想把string 转换成int的时候,需要以下流程:string -> char * -> int如此才可以,例子如下:string a = "1234";int b = atoi(a.c_str());这样打印b的时候,就是12原创 2015-07-01 01:58:48 · 2037 阅读 · 0 评论 -
算法学习 - 最长公共子序列(LCS)C++实现
最长公共子序列最长公共子序列的问题很简单,就是在两个字符串中找到最长的子序列,这里明确两个含义: 子串:表示连续的一串字符 。 子序列:表示不连续的一串字符。 所以这里要查找的是不连续的最长子序列,动态规划这里为什么要使用动态规划可以说一下,简单来说动态规划是为了降低时间复杂度的一种算法,申请一个额外空间,来保存每一个步骤的结果,最后从这些结果中找到最优的解。这里有个问题就是:原创 2015-08-25 23:30:22 · 18722 阅读 · 0 评论 -
C++学习 - 数组指针/指针数组
虽然我一直知道它们两个的区别,但是分不清名字应该是叫哪个。 这里区别一下。指针数组( array of pointers )顾名思义:这是个数组,数组里面的元素都是指针。int *arr[10];这个等同于 int *(a[4])因为*的优先级比较低,所以没有括号的时候,是arr和[10]先结合,变成一个数组,然后这个数组的元素是整型指针。初始化这个初始化要按照数组的方式来。for ( int i原创 2015-08-31 11:37:36 · 1070 阅读 · 1 评论 -
C++学习 - 数组参数传递及编程技巧
数组形参形参的长度会引起误解数组实参通过引用来传递数组多维数组的传递传递给函数的数组处理标记结束标准库方法显示传递数组大小在C++中传递数组参数是一件很简单的事情,但是这里面也有一些需要注意的细节,不能忽视,(只能说C++太难了,也太好玩了)。数组形参在这个里面,数组是作为形参传递的,有以下几种:void printArr(int*) {/* ... */}void printArr原创 2015-09-18 22:06:39 · 2006 阅读 · 0 评论 -
算法学习 - 查找第K大的数字
寻找第K大的数字一般我们会找最大的数字和最小的数字,然而时间都是O(N)级别的。这里第K大的数字查找方法其实很简单,就是每次把数组分成两部分,然后看第K大的数字属于哪个组,就查找这个组,扔另一组。这个方法更像快速排序,因为快速排序的时间复杂度是O(NlogN),而这个方法因为不需要对抛弃的一半进行操作,所以这个方法要比NlogN的方法要更快一点,平均复杂度接近O(n)。代码如下://// mai原创 2015-10-24 20:53:31 · 1242 阅读 · 0 评论 -
C++学习 - 泛型编程基础
C++作为兼容C语言却又更强大的语言来说,C++真正强大且区别于C的地方就是泛型编程了。在C++中,模板是泛型编程的基础,模板是创建类和函数的蓝图。模板定义假设要写一个函数比较两个值,指出第一个值是小于、等于还是大于第二个值。我们可以用函数重载:int compare( const int &a, const int &b){ if(a == b){ return 0;原创 2015-12-31 23:53:28 · 2053 阅读 · 0 评论 -
算法基础 - 树状数组(binary indexed tree)
定义 树状数组(Binary Indexed Tree(BIT), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值;经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值。 这种数据结构(算法)并没有C++和Java的库支持,需要自己手动实现。在Competit原创 2016-03-09 22:56:55 · 1742 阅读 · 0 评论 -
C++学习 - 操作符重载
最近看< Inside The C++ object model >又开始复习一下操作符重载,顺便记下来。操作符重载正常情况下,我们的操作符都是有固定的意义的,例如:+ - * /操作符,正常情况下都是可以操作数字的运算,但是当我们需要对两个对象进行相加的时候,这个时候就需要重载操作符了,不然编译器不知道两个对象如何进行操作。在C++中字符串是可以直接加法操作的,是因为在String类里已经重载了原创 2016-01-03 23:56:40 · 732 阅读 · 0 评论 -
设计模式 - 观察者模式(Observe pattern)C++实现
通用的设计模式比较多,大约十多种,其实之前也看多很多次,大致的理解就是利用继承,多态,封装,来达到代码的高重用性,以及系统可靠性可维护性。这篇博客主要记录一下我复习的观察者模式,利用C++实现的。观察者模式首先介绍一下什么是观察者模式: 观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是原创 2016-04-23 02:03:01 · 1194 阅读 · 0 评论 -
C++ - 工程中头文件的定义
头文件头文件大家都明白,里面存放了我们需要使用的『工具』,也是我们在使用某个类库的时候,需要include进来的内容。定义头文件定义头文件需要注意以下内容:要防止被重复include在某些情况下只写声明(declare),不写定义(define)首先如何防止重复include呢?其实很简单,就是加上:#ifndef#define SYMBOL#endif例如如下我定义了一个头文件,名字叫做原创 2016-07-24 14:43:18 · 1628 阅读 · 0 评论 -
C++学习 - 模板函数变长参数
为什么需要变长参数C变长参数1 文档2 C变长参数例子C模板函数以下所说编译环境为:Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1Apple LLVM version 7.3.原创 2016-07-28 14:37:17 · 2805 阅读 · 0 评论 -
数据结构 - 红黑树学习
红黑树红黑树算是用的比较多,但是平时自己很少写的一种数据结构了,先看下介绍: 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。看~ 典型是用来实现关联数组,能想到什么数据结构呢?list map set这些容器的底层都是红黑树来实现的。红黑树和AVL树(平衡二叉查找树)红黑树并不是完全平衡的一棵树,所以红黑树是在平均原创 2015-05-19 20:29:16 · 995 阅读 · 0 评论 -
C++学习 - Map的了解
Mapmap迭代器迭代器失效map初始化map插入元素Mapmap的特性是,所有键值会自动被排序。所有元素都是pair类型,同时拥有实体值(value)和键值(key)。pair的第一个元素被看做为键值,第二个看作为实值。同set,map不允许两个元素有相同的键值。又因为键值的自动排列特性,所以在键类型上必须有定义的严格弱排序。所谓的严格弱排序可以理解为在键值类型上的小于关系。所以假如不存在原创 2015-05-05 15:53:18 · 997 阅读 · 0 评论 -
STL学习 - 组件简介
六大组件STL提供六大组件,彼此可以组合套用。容器 (container)算法 (Algorithm)迭代器 (Iterator)仿函数 (Functor)配接器 (Adaptor)配置器 (Allocator)Container通过Allocator取得数据存储空间,Algorithm通过Iterator存取Container内容,Functor可以协助Algorithm完成不同的策原创 2015-02-17 14:58:13 · 2494 阅读 · 0 评论 -
算法学习 - Bellman-Ford(贝尔曼福特)算法(C++实现)
BellmanFord算法优点缺点实现BellmanFord算法Bellman-Ford算法是一个单源点最短路径算法,这个算法的目的就是找到整个图,到起始节点(自己定的)最短的路径和路径长度。优点/缺点优点 这个算法的优点应该是相对Dijkstra算法来说的,就是可以有负权值路径并且能检测到图中是否有负权值回路。缺点 缺点就是虽然能检测负权值回路,但是解决不了有负权值回路的最短路径问题原创 2015-03-27 00:38:35 · 7935 阅读 · 0 评论 -
STL学习 - queue了解
Queue是STL中的队列表示。特点是先进先出(First In First Output FIFO)。允许的操作是新增元素,移除元素,从最底端添加元素,从最顶端获取元素,除了从底端加入元素,从顶端取出外,没有任何其它方法可以存取queue的其他元素,也就是说queue不允许有遍历行为。把元素推入queue的操作为push, 将元素推出queue的操作为pop.由于queue系以底部容器完成原创 2015-03-09 19:17:44 · 2794 阅读 · 0 评论 -
算法学习 - 递归与非递归,位运算与乘除法速度比较
递归调用非递归调用运行时间比较结论位运算与乘除法结论递归调用/非递归调用我们都知道,很多算法,都是用递归实现的。当然它们同时也是可以用非递归来实现。一般我们在对二叉树进行遍历的时候,还有求斐波那契数的时候,递归是非常简单的。代码容易懂,好实现。但是递归的时候,有一个问题,就是需要压栈。为什么要压栈呢?因为当我在函数内部调用自身的时候,要中断当前的操作继续跳转到下一次的实现,而当前运行的状态要原创 2015-03-28 21:10:40 · 4700 阅读 · 1 评论 -
算法学习 - 欧几里得算法(辗转相除法)(c++实现)
欧几里得算法欧几里得算法也叫辗转相除法,是求两个整数最大公约数的算法。当然也可以求最小公倍数。算法实现其实算法的实现原理就是,有整数a b两个,每次求的一个数字r = a % b,然后把b放到a的位置,把r放到b的位置,递归调用。就是gcd(a, b) { return gcd(b, a%b); }这个样子的。结束条件是当 a%b == 0的时候停止。最大公约数//// main.cpp//原创 2015-03-28 00:56:27 · 30040 阅读 · 5 评论 -
C/C++学习 - gcc编译过程查看汇编代码
GCCGCC参数举例GCCgcc大家都很熟悉,是个编译器,功能强大,全称是:GUN GCC。平时大家都简单的称为:GCC, 功能强大,能够编译很多的语言。包括:c, c++, java, ada等…GCC参数gcc平时有很多参数,在平时我编译小程序的时候,都直接gcc -o object source.c就可以了。但是有一次我想查看我同样目的但是不同写法的两个代码是执行效率上是否有差别。所以我原创 2015-03-30 00:29:20 · 10940 阅读 · 0 评论 -
C/C++学习 - 基本类型所占字节数
基本类型这里所说的基本类型大致就是下面几种: int unsigned int long int long long short int char float double对于这些类型所占字节数,其实并不是一定的。尤其是int这个类型。在32位编译器下和64位编译器下很可能是不同的。下面是我在64位编译器下运行结果: 各位可以在自己机子下运行查看。//// main.cpp原创 2015-04-02 02:18:03 · 927 阅读 · 0 评论 -
算法学习 - 选择排序的稳定性讨论(C++实现)
选择排序选择排序的思想很简单。 每次选择当前的最小数字。 向后移动一位,选择第二小的数字。 … 移动到倒数第二位,操作后截止。 还不懂的附上百度百科选择排序。稳定性所以到底是不是稳定的呢?不稳定解释看过上面百度百科链接的人就会觉得一定不是稳定的啊。因为例如如下: [5 8 5 2 9 4]这个在第一次选择最小的时候,就把5和2的位置掉换了,变成如下: [2 8原创 2015-04-03 02:51:11 · 3865 阅读 · 2 评论 -
算法学习 - bitmap实现(c++)
BitMap介绍这里的BitMap指的是把数据存放在一个以bit为单位的数据结构里。 每位都只有0和1两个值。为0的时候,证明值不存在,为1的时候说明存在。举例来说: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]这是24位,也就是24bit, 同时8bit为1个字节。这里的空间也就是3个字节。这个时候假如我们要存放2 4 6 8 9 10原创 2015-03-24 21:47:24 · 6206 阅读 · 1 评论 -
算法学习 - 图的深度优先遍历(DFS) (C++)
深度优先遍历在图的遍历中,其中深度优先遍历和广度优先遍历是最常见,也最简单的两种遍历方法。深度优先遍历的思想就是一直向下找,找到尽头之后再去其他分支查找。在上一篇博客中我已经写了广度优先遍历(BFS)。 想看的传送门:图的广度优先遍历代码实现这里实现和BFS的差别在于,在BFS中,我们使用的容器是队列(queue),是先进先出的, 而在DFS中我们需要使用的是栈(stack)一个先进后出的容器。其原创 2015-04-01 15:48:26 · 11939 阅读 · 0 评论 -
C++学习 - 虚表,虚函数,虚函数表指针学习笔记
虚函数虚函数就是用virtual来修饰的函数。虚函数是实现C++多态的基础。虚表每个类都会为自己类的虚函数创建一个表,来存放类内部的虚函数成员。虚函数表指针每个类在构造函数里面进行虚表和虚表指针的初始化。下面看一段代码://// main.cpp// VirtualTable//// Created by Alps on 15/4/14.// Copyright (c) 2015年原创 2015-04-15 01:49:54 · 7183 阅读 · 0 评论 -
算法学习 - Bloom Filter(布隆过滤器)学习实现(C++实现)
Bloom filter简介Bloom Filter计算方法Bloom Filter优点缺点优点缺点图示说明Bloom filter简介Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员。如果检测结果为是,该元素不一定在集合中;但如果检测结果为否,该元素一定不在集合中。因此原创 2015-03-25 02:07:13 · 8246 阅读 · 10 评论