C/C++
共勉
这个作者很懒,什么都没留下…
展开
-
new一个类对象和使用类名创建一个对象有什么区别?该怎么解决
举个简单的例子: class Domo { private: int x; int y; public: void Set(int a,int b):x(a),y(b){} void Print() { cout }; void main() { Demo p; Demo *q=new Point(); p.Set转载 2015-05-03 10:28:54 · 5815 阅读 · 0 评论 -
1.用两个栈实现队列 2.用两个队列实现一个栈
1.用两个栈实现队列编程思想:添加元素全都放入栈sta,出栈元素都从栈stb退出。当stb非空时,直接进行元素出栈实现队列。只有在栈stb为空,且sta非空的情况下,将sta中所有的元素一次性加入stb,(stb为空,sta为空,队列空)再进行元素出栈。Quene核心代码void appendTail( ElementType data)//入队 {原创 2015-04-23 15:53:43 · 602 阅读 · 0 评论 -
c++ String去除头尾空格的方法 trim实现
这篇文章主要介绍了c++ String去除头尾空格的方法,非常具有实用价值,需要的朋友可以参考下本文实例讲述了c++ String去除头尾空格的方法,分享给大家供大家参考。具体实现方法如下:实现该功能可使用string的find_first_not_of,和find_last_not_of方法,具体实现带如下:#include #include转载 2015-03-31 10:43:22 · 23076 阅读 · 1 评论 -
c++ STL各容器简要介绍(待完善)
STL容器介绍STL的容器可以分为以下几个大类: 一:序列容器, 有vector, list, deque, string.二 : 关联容器, 有set, multiset, map, mulmap, hash_set, hash_map, hash_multiset, hash_multimap三: 其他的杂项: stack, queue, v转载 2015-04-03 09:06:40 · 368 阅读 · 0 评论 -
malloc、calloc、realloc,alloca 的区别
C语言跟内存申请相关的函数主要有 alloca、calloc、malloc、free、realloc等. alloca是向栈申请内存,因此无需释放. malloc分配的内存是位于堆中的,并且没有初始化内存的内容,因此基本上malloc之后,调用函数memset来初始化这部分的内存空间. calloc则将初始化这部分的内存,设置为0.转载 2015-04-03 17:03:55 · 982 阅读 · 0 评论 -
《编程之美: 求二叉树中节点的最大距离》的另一个解法
问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。书上的解法书中对这个问题的分析是很清楚的,我尝试用自己的方式简短覆述。计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点。情况B: 路径不穿过根节点,而是转载 2015-07-30 21:50:31 · 401 阅读 · 0 评论 -
希尔排序
希尔排序(Shell Sort)是插入排序的一种。因D.L.Shell于1959年提出而得名。一、基本思想 对待排记录序列先作“宏观”调整,再作“微观”调整。 所谓“宏观”调整,指的是 “跳跃式”的插入排序。即:将记录序列分成若干子序列,每个子序列分别进行插入排序。关键是,这种子序列不是由相邻的记录构成的。假设将n个记录分成d个子序列,则这d个子序列分别为:转载 2015-04-01 19:42:43 · 449 阅读 · 0 评论 -
C++ 父类指针指向子类对象||子类指针指向父类对象的理解
父类子类指针函数调用注意事项1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩)2,如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合生活习惯,在程序设计上也会给程序员带来困扰。(一般不会这么去定义)3,如果基础类和衍生类定义了相同名称的成员函数,那么通过对象指针调转载 2015-04-18 18:32:48 · 13442 阅读 · 1 评论 -
C++常用字符串分割方法实例汇总
这篇文章主要介绍了C++常用字符串分割方法实例汇总,包括了strtok函数、STL、Boost等常用的各类字符串分割方法,非常具有实用价值,需要的朋友可以参考下本文实例汇总了C++常用字符串分割方法,分享给大家供大家参考。具体分析如下:我们在编程的时候经常会碰到字符串分割的问题,这里总结下,也方便我们以后查询使用。一、用strtok函数进行字符串分割转载 2015-03-31 10:20:08 · 648 阅读 · 0 评论 -
左值,右值 及(++a)+=(a++)和(++a)=(++a)+(a++)计算
在赋值语句中,赋值运算符“=”左,右两边的变量名扮演者两种不同的角色。对赋值运算符右边的B我们需要的是它的值,对左边的A我们需要的是他所代表的存储单元(的地址)。为了区分一个名字的这两种特征,我们把一个名字所代表的单元(地址)称为该名的左值,把一个名字的值称为该名的右值。(左值既可以在等号右边又可以在等号左边,但是右值只能在等号右边)前置自增和后置自增的重要区别? ++a原创 2015-07-13 16:01:51 · 1146 阅读 · 0 评论 -
C运算符优先级+结合方向
优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .成员选择(对象)对象.成员名转载 2015-07-13 17:15:40 · 2046 阅读 · 0 评论 -
STl中的排序算法详细解析
全排序即把所给定范围所有的元素按照大小关系顺序排列。sort采用的是成熟的"快速排序算法"(目前大部分STL版本已经不是采用简单的快速排序,而是结合内插排序算法)1. 所有STL sort算法函数的名字列表:函数名 功能描述sort 对给定区间所有元素进行排序stable_sort 对给定区间所有转载 2015-04-28 21:56:06 · 466 阅读 · 0 评论 -
stack_queue_priority_queue 容器适配器
适配器(adapter):适配器是标准库中的通用概念,适配器是一种机制,包括容器适配器、迭代器适配器、函数适配器。本质上,适配器是使一事物的行为类似于另一事物的行为的一种机制。容器适配器让一种已存在的容器类型以一种不同的抽象类型的工作方式实现。STL提供了三种顺序容器适配器,queue、priority_queue、stack。默认的stack和queue都转载 2015-04-23 12:27:12 · 573 阅读 · 0 评论 -
Map容器(hash_map)
一、关于map的介绍map是STL的一个容器,和set一样,map也是一种关联式容器。它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,有助于我们处理一对一数据。这里说下map内部数据的组织,map内部是自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据转载 2015-04-23 09:26:07 · 676 阅读 · 0 评论 -
C++析构函数为什么要为虚函数
1.为什么基类的析构函数是虚函数? 在实现多态时,当用基类指针或引用操作派生类对象时,在析构时防止只析构基类而不析构派生类的状况发生。 下面转自网络:源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代码 #includeusing namespace std;clas转载 2015-05-12 14:53:57 · 354 阅读 · 0 评论 -
makefile详解
标 题: 给大家一个好东西发信站: BBS 哈工大紫丁香站 (Fri Mar 3 21:32:25 2006)好东西应该大家来分享嘛!这是我迄今为止见过的最好的讲解makefile的文章。希望有识之士能喜欢并收藏! 转载自:http://blog.csdn.net/zdl1016/article/details/919752概述——什么是makefi转载 2015-07-25 22:56:56 · 397 阅读 · 0 评论 -
面试_单链表操作试题_汇总
一、单链表结点的删除0、删除单链表p指向的那个元素,(时间和空间复杂度尽量小)二、单链表的存取1、找出单链表的倒数第K个元素,(仅允许遍历一遍链表)2、找出单链表的中间元素,(仅允许遍历一遍链表)三、单链表与环的问题3、判断单链表是否有环(6形状)?4、如何找到环的入口?5、如何知道环的长度?6、带环链表的转载 2015-04-22 20:45:37 · 376 阅读 · 0 评论 -
类大小的计算
C++语言中类的继承是C++重要特性之一,暂且将类的继承分为成员变量以及成员函数两个方面。我们知道标准C++选择的方式是每个类对象存储一份自己的成员变量,那么这份成员变量的存储区是怎么布局的呢?下面分几种情况记录一些自己看法和体会(部分参考《Inside The C++ Object Model》)。 1,非静态成员变量的单一继承且不含virtual函数 C++标准原创 2015-03-30 08:54:15 · 821 阅读 · 0 评论 -
#Pragma Pack(n)与内存分配
#pragma pack(n) n 字节的对齐方式 VC 对结构的存储的特殊处理确实提高 CPU 存储变量的速度,但是有时候也带来 了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。 VC 中提供了#pragma pack(n)来设定变量以 n 字节对齐方式。n 字节对齐就是说 变量存放的起始地址的偏移量有两种情况:第一、如果 n 大于等于该变量所转载 2015-07-12 23:32:27 · 379 阅读 · 0 评论 -
以K大小为一组反转单链表
例如Example:Inputs: 1->2->3->4->5->6->7->8->NULL and k = 3 Output: 3->2->1->6->5->4->8->7->NULL. Inputs: 1->2->3->4->5->6->7->8->NULL and k = 5Output: 5->4->3->2->1->8->7->6->NULL.原创 2015-09-14 13:29:12 · 610 阅读 · 0 评论 -
字符串匹配的KMP算法
字符串匹配的KMP算法 字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Kn转载 2015-11-04 21:13:39 · 420 阅读 · 0 评论 -
一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到转载 2015-11-05 22:45:32 · 360 阅读 · 0 评论 -
如何在vs2015下配置boost库
怎样在VS2013中安装配置boost_1_55_0库(简单些)因为boost都是使用模板的技术,所以所有代码都是写在一个.hpp头文件中。这样boost中的大部分内容是不需要编译生成相应的链接库,只需要设置下面的包含目录(或者设置一下环境变量),在源文件中包含相应的头文件就可以使用了。少部分库需要生成链接库来使用。下面介绍完整安装boost库的方法:1、首转载 2015-12-29 17:27:07 · 16805 阅读 · 1 评论 -
SVN使用教程总结
SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本。Subversion是什么? 它是一个自由/开源的版本控制系统,一组文件存放在中心版本库,记录每一次文件和目录的修改,Subversion允许把数据恢复到早期版本,或是检查数据修改的历史转载 2016-01-18 14:54:38 · 403 阅读 · 0 评论 -
SVN服务器的本地搭建和使用
SVN服务器的本地搭建和使用 Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说.首先来下载和搭建SVN服务器.现在Subversion已经迁移到apache网站上了,下载地址:http://subversion.apache.org/packages.html这是二进制文件包的下载地址,你可在左侧的导航栏找转载 2016-01-18 15:08:30 · 420 阅读 · 0 评论 -
RMQ(Range Minimum Query)问题
问题描述RMQ问题是求给定区间中的最值问题。对于长度为n的数列A,回答若干查询RMQ(A, i, j)。返回数组A中下标在[i,j]里的最小值的下标。比如数列 5,8,1,3,6,4,9,5,7 那么RMQ(2,4) = 3, RMQ(6,9) = 6.解决问题最简单的解法时间复杂度是O(n),就是对于每一个查询遍历一遍数组。但是当n非常大的时候,并且查询次数非常转载 2016-01-20 14:39:32 · 537 阅读 · 0 评论 -
BMP压缩算法
在全文检索中通常要对索引进行压缩存储,在压缩之前如果对文本进行一定的可逆变换能够使之更易压缩,BWT就是这样一种变换. 通过一个例子来介绍BWT,假设一段待转换的文本为:ababc, 则BWT的过程如下: 在T后插入结束符#得到新的文本串T#,循环左移,每次一位,得到一个|T#|行的矩阵,按首字母排序得到M F = first column of M转载 2016-01-21 15:24:01 · 5445 阅读 · 0 评论 -
计算后缀数组的LCP(Longest Common Prefix)
所谓LCP(Longest Common Prefix)是指后缀数组中相邻两个后缀的最长公共前缀的长度。在后缀数组的应用中,LCP是很重要的信息。设后缀数组为SA, 用LCP(i)定义为第SA[i]个后缀和第SA[i-1]个后缀之间的最长公共前缀长度。由于输入文本T的第p个后缀和第p-1个后缀之间存在如下关系:LCP(p) >= LCP(p-1) - 1,因此如果已知第p-1个后缀的LCP转载 2016-01-21 22:22:47 · 780 阅读 · 0 评论 -
求字符串中最长无重复字符的子串
转载自http://www.cnblogs.com/luxiaoxun/archive/2012/10/05/2712131.html特此感谢楼主,仅作笔记使用后缀数组--处理字符串的利器后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也并不逊色,而且它比后缀树所占用的内存空转载 2015-12-07 11:30:33 · 518 阅读 · 0 评论 -
C++ stringstream的用法|c++ 字符串流 sstream(常用于格式转换)
另参见http://blog.163.com/zhuandi_h/blog/static/180270288201291710222975/stringstream的用法使用stringstream对象简化类型转换C++标准库中的提供了比ANSI C的更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换。为什么要学习如果转载 2016-01-26 22:21:02 · 6943 阅读 · 0 评论 -
给定N张扑克牌和一个随机函数,设计一个洗牌算法
假定N=54,首先,我们有一个随机函数发生器,能够产生1-54之间的随机数,如何保证抽第一张牌是54中可能,抽第二张牌是53中可能,……可以这样做,假设扑克牌是一个54维的数组card, 我们要做的就是从这个数组中随机取一个元素,然后在剩下的元素里再随机取一个元素… 这里涉及到一个问题,就是每次取完元素后,我们就不会让这个元素参与下一次的选取。int index=i+rand()%原创 2015-10-11 20:35:11 · 2292 阅读 · 0 评论 -
剑指offer 顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。 分析:第一次看到这个题原创 2015-10-08 16:31:04 · 406 阅读 · 0 评论 -
快速排序
快速排序是C.R.A.Hoare于1962年提出的一种分区交换排序。它采用了一种分治法(Divide-and-ConquerMethod)策略,分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。快速排序是目前己知的平均速度最快的一种排序方法。一、基本思想 快速排序方法的基本思想是:从待排序的n转载 2015-04-01 15:43:37 · 578 阅读 · 0 评论 -
插入排序
直接插入排序折半插入排序二路插入排序表排序希尔排序插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的数据序列的适当位置,直到全部记录插入完成为止。一、基本思想 假设待排序的记录存放在数组R[0…n-1]中。初始时,R[0]自成1个有序区,无序区为R[1…n-1]。从i=1起直至i= n-1为止,依次将R[i]插入转载 2015-04-01 17:24:15 · 465 阅读 · 0 评论 -
堆排序
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为转载 2015-04-01 20:34:02 · 625 阅读 · 0 评论 -
归并排序
对于排序大列表数据,一个有效的排序算法是归并排序。类似于快速排序算法,其使用的是分治法来排序。归并排序的基本思想是:将两个或两个以上的有序子序列”归并”为一个有序序列。在内部排序中,通常采用的是2-路归并排序。即:将两个位置相邻的有序子序列“归并”为一个有序序列。算法描述归并操作的工作原理如下: 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 设定两转载 2015-04-01 22:02:00 · 643 阅读 · 0 评论 -
C++ 类的静态成员详细讲解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和转载 2015-04-01 22:09:38 · 309 阅读 · 0 评论 -
冒泡排序
基本概念 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数转载 2015-04-01 16:41:55 · 361 阅读 · 0 评论 -
选择排序
选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的记录序列的最后,直到全部记录排序完毕。一、基本思想 选择排序是一种简单且直观的排序方法。选择排序的做法是:从待排序的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第一个记录交换位置;然后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将它与序列中的转载 2015-04-01 16:51:01 · 727 阅读 · 0 评论 -
寻找一个字符串中连续出现次数最多的子串
首先要搞清楚题目关于子串的概念。1.一个字符当然也算自串。而题目要求连续出现次数最多的子串。如:abcbcbcabc,连续出现次数最多的子串是bc,连续出现三次。 abcccabc,连续出现次数最多的子串是c,连续出现三次。算法描述首先获得后缀数组:a b c b c b c a b c .substr[0]b c b c b c转载 2015-04-07 13:30:07 · 858 阅读 · 0 评论