- 博客(48)
- 资源 (2)
- 收藏
- 关注
转载 【Boost】boost::shared_from_this值得注意的地方
shared_from_this()在一个类中需要传递类对象本身shared_ptr的地方使用shared_from_this函数来获得指向自身的shared_ptr,它是enable_shared_from_this的成员函数,返回shared_ptr。 首先需要注意的是:这个函数仅在shared_ptr的构造函数被调用之后才能使用。原因是enable_shared_from_this::wea
2015-10-18 00:29:23
510
原创 boost::bind释疑
最近在几经波折之后,终于对于boost::bind有点理解了。对于习惯了其他语言的人来说,boost::bind是个挺神奇的东西,它可以将你的方法适配成任何其他的方法。其实这得益于c++的模板以及操作符重载,去看boost::bind的实现就会发现它是一个有n多重载的函数,这些重载主要是为了适应函数的参数个数。其实boost::bind的原理是函数对象,而函数对象就是一个重载了()操作符的对象,这样
2015-10-04 00:47:59
533
转载 shell 生成指定范围随机数与随机字符串
01.#!/bin/bash 02. 03.function rand(){ 04. min=105.max= 1 05. max=((2− 2-min+1)) 06. num=(( ((RANDOM+1000000000)) #增加一个10位的数再求余 07. echo (( ((num%max+ max+min)) 08.} 09. 10.rnd=(r
2015-10-04 00:44:14
1672
转载 C++ STL之stack queue 作者csdn账号 liuhmmjj
1、stack stack 模板类的定义在头文件中。 stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要 的,在不指定容器类型时,默认的容器类型为deque。 定义stack 对象的示例代码如下: stack s1; stack s2; stack 的基本操作有: 入栈,如例:s.push(x); 出栈,如例:s.pop();注意,出栈操作只是删
2015-09-23 00:42:54
503
原创 欧拉回路的几个小概念
其中点必须终止在气点上的欧拉回路只有当图是连通的并且每个顶点的度是偶数是才有可能存在。这是因为,在欧拉回路中,一个顶点有边进入,则必须有边离开。如果任意顶点v 的度为奇数,那么最终会达到这样的一种地步,即只有一条边进入v的边尚为访问到,若沿该边进入v点,那么只能停在v,不可能再出来。如果恰好有两个顶点的度是奇数,那么当从一个奇数度 的顶点出发最后终止在另一个奇数度的顶点时,仍有可能得到一个欧拉环游。
2015-09-05 10:44:38
1093
原创 CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2015-09-04 09:24:24
416
转载 c++ assert() 使用方法
c++ assert() 使用方法分类: c/c++ 2013-06-27 09:07 12541人阅读 评论(1)收藏 举报assertassert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算
2015-09-01 23:53:18
387
原创 一个精炼的广度优先搜索算法
用一个队列来存储要遍历的顶点。在迭代开始的时候,队列只含有距离为currDist的顶点,当添加距离为currDist的邻接点时,由于它们自队尾入队,因此这就保证它们直到所有距离为currDist的顶点都被处理之后才被处理。在距离为currDist处的最后一个顶点出队并被处理后,队列只含有距离为currDist+1的顶点,因此该过程将不断进行下去。只需要把开始的结点放入队列中以启动这个过程即可。无权最
2015-09-01 16:12:03
554
原创 迷宫生成算法
应用求并/查找数据结构的一个例子是迷宫的生成。起点位于左上角。而中点位于图的右下角。可以把迷宫看成是由单元组成的5X5矩形,在该矩形中,左上角的单元被连通到右下角的单元,而且这些单元与相邻的单元通过墙壁分离开来。 生成迷宫的一个简单算法是从各处的墙壁开始(除入口和出口之外)。此时,不断地随机选择一面墙,如果被该墙分割的单元彼此不连通,那么就把这面墙拆掉。重复这个过程直到开始单元和终止单元
2015-08-31 15:52:34
2265
原创 对大对象进行排序的算法
快速排序就是快速排序,谢尔排序就是谢尔排序。然而,直接应用基于这些算法的函数模板时,如果要排序的Comparable对象很大的话,有时效率会很低。问题就在于。问题就在于重新排列Comparable对象时,进行太多复制Comparable对象的工作。如果Comparable对象很大而且难于复制的话,其代价也会很高。 一般来说,这个问题的解决方案很简单:生成一个指向Comparable的指针
2015-08-30 11:17:54
876
原创 快速选择
查找集合S中第k个最小元的算法几乎与快速排序相同。事实上,其前三步是一样的。 令|Si|为Si中元素的个数,快速选择的步骤如下: (1) 如果|S|=1,那么k=1并将S中的元素作为答案返回。如果正在使用小数组的截止方法且|S|<=CUTOFF,则将S排序并返回第k个最小元. (2)选取一个枢纽元v属于S。 (3)将集合S-{v}分割成S1和S2,就像快速排序中所做的那样。
2015-08-29 17:31:26
670
原创 快速排序
顾名思义,快速排序(quicksort)是在实践中最快的一致排序算法,它的平均运行时间是O(NlogN)。该算法之所以特别快,主要是由于非常精炼和高度优化的内部循环。它的最坏情形的性能为O(N^2),但稍加努力就可以改变这种情形。 像归并排序一样,快速排序也是一种分治的递归算法。将数组S排序的基本算法由下列简单的四步组成: (1)如果S中元素个数是0或1,则返回。 (2
2015-08-29 15:33:08
912
原创 归并排序
归并排序算法很容易描述。如果N=1,那么只有一个元素需要排序,答案是显而易见的。否则,递归地将前半部分数据和后半部分数据各自归并排序,得到排序后的两部分数据,然后使用合并算法将这两部分合并到一起。例如,欲将8元素数组24,13,26,1,2,27,38,15排序,我们地柜地将前4个数据和后4个数据分别排序,得到1,13,24,2,15,27,38。然后,将这两部分合并,得到最后的表1,2,13,15
2015-08-28 22:48:06
656
原创 堆排序
在利用最小堆进行排序时,需要执行N次deleteMin操作。按照顺序,最小的元素先离开堆。通过将这些元素记录到第二个数组然后再将数组拷贝回来,我们得到N个元素的排序。由于每个deleteMin花费O(logN)时间,因此总的运行时间是O(NlogN)。 该算法的主要问题在于,它使用了一个附加的数组。因此,存储需求增加一倍。在某些实例中这可能是个问题。注意,将第二个数组复制回第一个数组的附
2015-08-28 09:30:44
953
原创 谢尔排序
谢尔排序的名称源于它的发明者Donald Shell,该算法石冲坡二次时间屏障的第一批算法之一,不过,知道它最初被发现的如干年后才证明了它的亚二次时间界。它通过比较相距一定时间间隔的元素来工作;各趟 比较所用的距离随着算法的进行而减小,知道只比较相邻元素的最后一趟排序为止。由于这个原因谢尔排序也叫作所见增量排序。 增量序列的一个流行的选择是使用Shell建议的序列:hi=[N/2]和hk=h
2015-08-27 23:30:23
1045
原创 一些简单排序算法的下界
以数为成员的数组的逆袭(inversion)是指具有性质ia[j]的序偶(i,j)。列如 输入数据34,8,64,51,32,21有9个逆序,即(34,8),(34,32),(34,21),(64,51),(64,32),(64,21),(51,32),(51,21),(32,21)。定理1 N个互异元素的数组的平均逆序数是 N(N-1)/4 证明:见韦斯的《数据结构与算法分析》2
2015-08-27 23:13:19
1186
原创 传递实参时 丢弃了类型限定
将’const xxx’作为’xxx’的‘this’实参时丢弃了类型限定。这样的错误一般是因为const限定符的问题。如:#include <iostream>using namespace std;class Point3d{public: Point3d(float x=0.0,float y=0.0,float z=0.0) :_x(x),_y(y),_z(z){
2015-08-27 19:52:38
3962
转载 排序算法
插入排序:就像摸牌,摸一张插进去,找一个哨兵,从第二个开始,和前一个比较,小的话前移一位。#include iostream> #includestdlib.h> using namespace std; #define N 4 //不能加分号结束 class sort { public: void insertSort(int a[]
2015-08-08 23:22:10
418
原创 使用函数对象(侯捷先生译为伪函数)实现二叉查找树
以前看过《C++标准程序库》,所以乘此机会小复习下。 什么是伪函数? 伪函数是范型编程强大威力和纯粹抽象概念的又一个例证。你可以这么说,任何东西,只要其行为像函数,它就是个函数。因此,如果你定义了一个对象,行为向函数,它就可以被当作函数来用。好,那么什么才算是具备函数行为?所谓函数行为,是指可以”使用小括号传递参数,来调用某个东西”。例如: function
2015-08-08 15:49:47
539
原创 二叉查找树
二叉树的一个重要的应用是他们在查找中的应用假设树中的每一个结点存储一项数据。使二叉树成为二叉查找树的性质是,对于树中的每个结点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项。注意,这意味着,该树所有死亡元素都可以用某一种一致的方式排序。template <typename Comparable>class BinarySearchTree{ public
2015-08-08 15:17:34
343
原创 树的实现
实现树的一种方法是在每一个结点除数据外还要有一些链,来指向该结点的每一个儿子。然而,由于每个结点的儿子数可能变化很大并且事先不知道,因此在数据结构中建立到各儿子结点的直接链接是不可行的,因为这样会产生太多浪费的空间。实际上解法很简单:将每个结点的所有儿子结点都放在树结点的链表中。下面是一个非常典型的声明。struct TreeNode{ Object element; TreeNo
2015-08-08 10:33:42
367
转载 Linux 技巧:让进程在后台可靠运行的几种方法
级别: 中级申 毅 (shenyyi@cn.ibm.com), 软件工程师, IBM 中国软件开发中心2008 年 5 月 29 日想让进程在断开连接后依然保持运行?如果该进程已经开始运行了该如何补救? 如果有大量这类需求如何简化操作?我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定
2015-08-08 09:04:13
398
转载 linux后台开发知识点
作者:yurunsun@gmail.com 新浪微博@孙雨润 新浪博客 CSDN博客日期:2013年7月9日linux后台开发需要熟练掌握哪些技能呢?1. 内存泄漏cpu wait% ↑top: swap memory ↑kswap进程valgrid中malloc/free值调用mallinfo输出当前所占内存strace -p 2. 野指针valgrid中
2015-08-08 09:02:04
802
原创 C++实现List类
考虑到设计需要,我们需要提供下面的4个类: (1)List类本身。它包含连接到两端的链接,表的大小以及一系列方法。 (2)Node类。该类看起来是私有的嵌套类。一个节点包含数据和用来指向其前和其后的结点的指针,以及适当的构造函数。 (3)const_iterator类。该类抽象了位置的概念。 (4)iterator类。template <typename Object>class List
2015-08-07 16:26:05
1500
原创 C++实现的Vector类
template <typename Object>class Vector{ public: explicit Vector(int initSize = 0):theSize(initSize), theCapacity(initSize+SPARE_CAPACITY) { objects=new Object[ theCapacity ]; } Vect
2015-08-07 12:41:48
668
1
原创 二分搜索&最大公因数
二分搜索/***Performs the standard binary search using two comparisons per level*Return index where item is found or -1 id not found.*/template <typename Comparable>int binarySearch(const vector<Compar
2015-08-06 17:27:37
472
原创 最大子序列和求解 最优算法O(N)
/*** Linear-time maximum contiguous subsequence sum algorithm.*/int maxSubSum4(const vector<int> & a){ int maxSum=0,thisSum=0; for( int j=0;i<a.size();j++) { thisSum+=a[j];
2015-08-06 16:09:48
498
原创 最大子序列和问题求解 algorithm 1 O(N^3)
穷举法 /** *Cubic maximum contiguous subsequence sum algorithm. */ int maxSubSum1( const vector<int> & a) { int maxSum=0; for( int i=0; i<a.szie(); i++) for(int j=i;j<a.size();j++)
2015-08-06 14:26:23
593
转载 Git 使用规范流程
Git 使用规范流程作者: 阮一峰日期: 2015年8月 5日团队开发中,遵循一个合理、清晰的Git使用流程,是非常重要的。否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护。下面是ThoughtBot 的Git使用规范流程。我从中学到了很多,推荐你也这样使用Git。第一步:新建分支首先,每次
2015-08-05 13:03:34
410
原创 Python学习之数字
Python核心数据类型之数字Python的基本数字类型还是相当基本。Python中的数字支持一般的数学运算。例如,加号(+)代表加法,星号代表乘。双星号(**)表示乘方。>>> 123 + 222345>>> 1.5 * 46.0>>>2 ** 1001267650600338229401496703205376Python3.0的整数类型会自动提供额外的精度,以用于较大的数值>>>l
2015-08-05 12:50:16
412
原创 linux rm 删除指令新用
最近在导师写网络带宽分配的仿真程序,期间产生了大量临时文件,怎么用rm指令删除这些临时文件而不删除其他特定的文件呢?比如下面是临时文件:temp101 temp102 temp103 temp104 temp105temp201 temp202 temp203 temp204 temp205temp301 temp302 temp303 temp304 temp305temp4
2015-08-04 11:13:39
1437
原创 使用matlab绘画柱状图,且使用不同的图案填充
在论文中,图表往往发挥着极为重要的作用,好的图表将能进一步提升论文的质量。在书写论文时,很多时候需要绘制柱状图,然而不同的柱状图如果采用颜色区分,当论文打印以后,视觉效果大打折扣,甚至无法区分。在遇到这个问题时,我通过网站论坛搜索,终于找到了在matlab中绘制柱状图,并采用不同的图案进行表示。主要利用下面的代码。代码出自:http://www.aos.wisc.edu/~dvimon
2015-07-16 22:30:45
16901
1
原创 父子进程之间数据的同步
最近导师让我实现她论文中的FIWI 网络中的上行DBA 算法,算法实现中需要用到IPC机制来完成记录各个服务端发送来的MPCP 的Report消息,以前读过APUE所以很快做出来了。由于论文还未发表,所以我只能在写个小程序来记录这一小技术。下面这段小程序主要完成的是让子进程来填充父进程中定义的一个结构体数组。程序存在liinux系统中,不想再开samba了,直接截图,嘿嘿......程序中用到
2015-05-24 18:50:37
1315
翻译 机器学习之Transforming Auto-encoders
本文不是原论文的直接翻译,只是翻译了核心部分,Instruction 和Discussion没有翻译摘要: 当前已经实现的从图像中识别出物体的方法表现的非常糟糕,这些方法的智能程度很难说已经达到了让人们满意的地步。一些比较好的计算机视觉系统使用梯度导向的直方图作为“视觉单词”,并且通过使用简单的空间范式来构造这些元素的分布模型。这些方法能够在不知道图像中物体的
2015-05-24 18:33:07
3858
原创 samba能看到linux中的文件目录,但是看不到文件的解决(查看SElinux状态&关闭SElinux)
百度介绍:SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux
2015-04-17 19:26:12
1954
原创 linux下新旧两个软件的环境变量设置
将新版软件的环境变量添加在旧版软件的环境变量之前 ex: ===================================================== /root/.bashrc========================================================export PATH=$PATH:/opt/arm-linux-gd
2015-04-14 12:34:35
1191
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人