- 博客(59)
- 收藏
- 关注
转载 快速排序的非递归实现
快速排序的非递归实现首先说明一下快速排序是对冒泡排序的改进。为什么这么说呢?想一下冒泡排序,它把序列分成了两部分,前半部分无序,后半部分升序排列,并且后半部分的数都大于前半部的数。由此可得到快速排序和冒泡排序的一些共同点:都要经历n趟排序每趟排序要经历O(n)次比较都是后半部分元素比前半部大而不同之处就在于冒泡排序的交换操作发生相邻的元素之间,即一趟排序可以要经过多次交
2016-05-31 20:55:52 327
转载 你有被stringstream坑过吗?
stringstream常用来安全的格式化若干个字符串,数值到一个缓冲区, 而不用担心溢出, 可以用来取代snprintf. 但是很多人都在使用stringstream的时候遇到因为stringstream内部的缓冲区没有正确的清空导致的问题.那么把stringstream类内部的缓冲区正确的清空方式是什么呢?stringstream ss;答案是: ss.str("") 方法
2016-05-31 19:15:32 887
转载 C++ I/O库流状态标志位
再来看看输入状态标记位、状态测试函数、状态设置函数之间的关系: 输入状态标记位常量有以下几个: 标记位常量常量含义failbit标记位的值eofbit标记位的值badbit标记位的值转化为10进制iOS::failbit输入(输出)流出现非致命错误,可挽回
2016-05-31 19:14:33 597 1
转载 函数重载机制的奥秘
C++是怎么区分同名的函数呢?原来是编译器悄悄使用了一个称作名字分裂规则的机制。现代民俗给女孩子起名喜欢‘娜’、‘薇’等字,一个班出现两个‘李娜’,不是什么新鲜事,然而老师居然也能应付。老师是怎么做的呢?老师把她们的名字进行了扩展,把能区分她们一些特性加到姓名里来了,于是乎,出现了‘大李娜’、‘小李娜’、‘胖李娜’、‘瘦李娜’。假如她们高矮、胖瘦都一样,老师也有办法,把她们的家长找来开会:“有
2016-05-31 09:45:49 303
转载 函数调用--函数栈
函数调用--函数栈函数调用大家都不陌生,调用者向被调用者传递一些参数,然后执行被调用者的代码,最后被调用者向调用者返回结果,还有大家比较熟悉的一句话,就是函数调用是在栈上发生的,那么在计算机内部到底是如何实现的呢? 对于程序,编译器会对其分配一段内存,在逻辑上可以分为代码段,数据段,堆,栈代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写数据段
2016-05-30 14:56:05 217
转载 C++ this指针的理解
先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this 就是指向my的指针
2016-05-27 16:30:08 182
转载 C++之常量(一)
1概述一个C++程序就是一系列数据与操作的集合。当一个C++程序开始运行的时候,与该程序相关的数据就会被加载到内存中。当数据与内存发生关联的时候,这些数据就会具有如下的特性:数据在内存中的地址。这个地址决定了数据在内存中的存储位置。在32位的系统中,每一个C++程序都具有4GB大小的内存地址空间,这个4GB大小的内存空间又被划分为若干个区域,如:栈区,堆区,全局(静态)区,文字常量
2016-05-27 15:56:53 519
转载 C++中new和malloc的区别
1、new 是c++中的操作符,malloc是c 中的一个函数2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。4.new可以
2016-05-27 11:28:54 241
转载 new/delete 和malloc/free 的区别一般汇总
一、基本概念 malloc/free:1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系
2016-05-27 11:28:10 195
转载 vector利用swap()函数进行内存的释放
首先,vector与deque不同,其内存占用空间只会增长,不会减小。比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个。所有空间在vector析构时回收。1、释放内存: empty()是用来检测容器是否为空的,clear()可以清空所有元素。但是即使clear(),所占用的内存空间依然如故。如果你需要空间动
2016-05-27 11:27:18 625
转载 malloc函数详解
一、原型:extern void *malloc(unsigned int num_bytes);头文件:#include 或 #include (注意:alloc.h 与 malloc.h 的内容是完全一致的。)功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free(
2016-05-26 19:55:16 185
转载 浅谈内存分配方式以及堆和栈的区别
对于一个程序要运行,涉及到的内存分配是一个首要问题,这里简单说一下一个简单的程序运行所涉及到的内存分配方式。另外,在数据结构中存在堆和栈的概念,栈是一种先进后出的数据结构,堆则是一种排序方式,而在内存分配中也存在堆(heap)和栈(stack)的概念,与数据结构中的概念不同,这里简单说明在内存分配中的堆栈之间的不同。一、内存分配方式1、全局变量和静态变量(static变量),是由编
2016-05-26 16:38:32 229
转载 c++中构造函数初始化的方法以及主要区别
一、我的问题是关于初始化C++类成员的。我见过许多这样的代码: CSomeClass::CSomeClass() { x=0; y=1; } 而在别的什么地方则写成下面的样子: CSomeClass::CSomeClass() : x(0), y(1) { } 我的一些程序员朋友说第二种方法比较好,但他们都不知道为什么
2016-05-26 15:29:24 291
转载 C++的const类成员函数
我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误。例如,[cpp] view plain copyconst char blank = ‘’; blank = ‘\n’; // 错误 面向对象程序设计中,为了体现封装性,通常不允许直接修改类对象的数据成
2016-05-26 15:03:12 282
转载 扫盲回帖系列之1——栈的疑问
看到一个提问帖子(http://bbs.csdn.net/topics/390930552),问题摘录如下:--------------------------------------------------------------------------------例如函数调用的时候会在栈中为函数开辟一段空间,函数的参数也会挨个入栈,函数调用结束,会平衡栈,释放空间。函数的局
2016-05-26 11:50:56 269
转载 关于书上说的“编译的时候分配内存”
一下均为网络上收集的资料: 1、所谓在编译期间分配空间指的是静态分配空间(相对于用new动态申请空间),如全局变量或静态变量(包括一些复杂类型的常量),它们所需要的空间大小可以 明确计算出来,并且不会再改变,因此它们可以直接存放在可执行文件的特定的节里(而且包含初始化的值),程序运行时也是直接将这个节加载到特定的段中,不 必在程序运行期间用额外的代码来产生这些变量。 其实在运行期间再看
2016-05-26 10:55:49 285
转载 c语言开辟内存的问题
假如我用在VC编译器中使用语句int i=0;这时我还没有点击编译和运行按钮,系统已经为i开辟了内存吗?还有就是要不要给i赋值才会开辟内存?直接写int i;也会开辟内存吗?①C语言编码的时候不会开辟内存,只有在编译之后才会生成可执行程序,在可执行程序里面给出内存的开辟方法。②真正内存的开辟是在程序运行的时候。程序装载到内存里面,开始运
2016-05-26 10:54:55 684
转载 十七项编程比赛,你敢试试吗?
众所周知,编程几乎已经成为各行各业不可或缺的重要技能储备,它能够以无法替代的方式帮助我们组织并维护大型系统,因此如今越来越多的人才也开始踏上这条学习之路。5 Coding Challenges to Help You Train Your Brain大家可以通过交互式平台学习编程,也可以从各类教程及论著当中汲取营养——每个人的学习轨迹不同,选择的学习方式亦有所区别。不过,有
2016-05-25 21:22:46 660
转载 KMP模式匹配算法中next和nextval的求解
KMP算法是模式匹配专用算法。它是在已知模式串的next或nextval数组的基础上执行的。如果不知道它们二者之一,就没法使用KMP算法,因此我们需要计算它们。KMP算法由两部分组成:第一部分,计算模式串的next或nextval数组。第二部分,利用计算好的模式串的nextval数组,进行模式匹配。 KMP算法中有next数组和nextval数组之分。
2016-05-25 17:31:12 1657
转载 kmp中next和nextval的区别
模式匹配。kmp中next数组表示如果当前匹配不成功,匹配串移动到的位置,不考虑移动到的位置的数与当前位置数的关系。kmp中nextval数组表示如果当前匹配不成功,匹配串移动到的位置,考虑移动到的位置的数与当前位置数的关系。求next[cpp] view plain copywhile(i{ i
2016-05-25 17:30:25 1281
转载 next_permutation函数
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件下面是以前的笔记 与之完全相反的函数还有prev_permutation (1) int 类型的next_permutation int main(){ int a[3];a[0]=1;a[1]=2;a[2]=3; do{cout} while (next_permutat
2016-05-25 16:10:23 214
转载 C++ 析构函数 为何一般定义为虚函数
C++ 析构函数 为何一般定义为虚函数,例子:[cpp] view plain copy"font-size:14px;">#include using namespace std; class Animal { public: Animal() { cout
2016-05-25 11:53:32 352
转载 关于C++类的静态数据为什么一定要初始化
我们知道C++类的静态成员变量是需要初始化的,但为什么要初始化呢。其实这句话“静态成员变量是需要初始化的”是有一定问题的,应该说“静态成员变量需要定义”才是准确的,而不是初始化。两者的区别在于:初始化是赋一个初始值,而定义是分配内存。静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存。可以通过以下几个例子更形象的说明这个
2016-05-25 10:39:05 460
转载 static成员必须在类外初始化
为什么static成员必须在类外初始化为什么静态成员不能在类内初始化在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样class A{ private: static int count ; // 类内声明};int A::count = 0 ; // 类外初始化,不必再加static关键字为什么?因为静
2016-05-25 10:37:35 203
转载 next_permutation函数
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件下面是以前的笔记 与之完全相反的函数还有prev_permutation (1) int 类型的next_permutation int main(){ int a[3];a[0]=1;a[1]=2;a[2]=3; do{cout} while (next_permutat
2016-05-24 21:55:40 219
转载 c++工程里一个文件怎么调用另外一个文件里的函数
(1)前提为,另一个文件中的函数,不能是静态函数,即不能有static修饰。调用方法,在调用前进行声明,然后直接调用即可。声明方法:1 直接在调用前,写函数声明:如调用函数为int func(int a),那么在调用前只需要int func(int a);这样声明后,即可使用func。2 将声明写在头文件中。如在名为func.h的头文件中加入int fu
2016-05-24 14:47:42 30052 6
转载 C语言变量作用域
C语言中变量的作用域C语言中所有变量都有自己的作用域,申明变量的类型不同,其作用域也不同。C语言中的变量,按照作用域的范围可分为两种, 即局部变量和全局变量。 一、局部变量局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。例如:int f1(int a) /*函数f1*/ { in
2016-05-24 11:40:47 357
转载 负数转换为补码
有些基础还得重新拿起来, 以前刚学的时候不知道为什么,现在才真能豁然开朗。我们已经知道计算机中,所有数据最终都是使用二进制数表达。我们也已经学会如何将一个10进制数如何转换为二进制数。不过,我们仍然没有学习一个负数如何用二进制表达。 比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为:00000000 00000000 0
2016-05-23 15:10:50 2901
转载 编译器编译原理详解
第一篇摘自:http://www.21ic.com/app/embed/201103/79359.htm1. 词法分析词法分析器根据词法规则识别出源程序中的各个记号(token),每个记号代表一类单词(lexeme)。源程序中常见的记号可以归为几大类:关键字、标识符、字面量和特殊符号。词法分析器的输入是源程序,输出是识别的记号流。词法分析器的任务是把源文件的字符流转换成记号流。本质
2016-05-20 20:54:23 597
转载 C语言编译原理简介
1. 编辑器: 我们编写代码的一些窗口,如:记事本、word、notepad等。2. 编译器: 检查用户代码的一些语法错误并且将其编译成汇编代码。3.汇编器:将编译出来的文件变成目标代码(windows 下的.obj文件)4.连接器:将目标代码连接成为可执行文件(.exe),及双击就可以运行文件。5.集成开发环境(Integrated Development Env
2016-05-20 20:52:33 406
转载 (++a)+=(a++)怎么计算啊?
(++a)+=(a++)怎么计算啊? 分享| 2009-07-09 00:08zzz2003526 | 浏览 1352 次int a=4;cout<<(++a)+=(a++)<<endl; //结果为10cout<<a<<endl; //结果为11帮忙分析下啊,谢谢了。2009-07-09 00:31提问者采纳
2016-05-20 19:29:41 2607
转载 C++引用作为函数参数
C++引用作为函数参数下一节>分享到:QQ空间新浪微博腾讯微博豆瓣人人网C语言辅导班,帮助有志青年!按月付费,减轻负担,仅需200元,穷人也能学!【iOS辅导班】一对一交流,快速学习,仅需三个月,玩转APP开发,找到靠谱的工作!有了变量名,为什么还需要一个别名呢?C++之所以增加引用类型
2016-05-20 16:07:32 399
转载 Top K 算法详解
Top K 算法详解 (2013-09-27 20:56:29)转载▼ 分类: 算法应用场景: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过
2016-05-20 15:27:10 264
转载 我学编程时犯的最大两个错误
我学编程时犯的最大两个错误投递人 itwriter 发布于 2012-09-20 09:05 评论(4) 有2915人阅读 原文链接 [收藏] « » 英文原文:The 2 Biggest Mistakes I Made When Learning to Code 一年前我大学毕业,刚刚步入社会。我很很多很多创业计划,我想去实现它们。但是,我不会编程
2016-05-19 21:56:45 239
转载 程序员面试笔试宝典学习记录(一)(常见面试笔试题目)
程序员面试笔试宝典学习记录(一)(常见面试笔试题目)摘选著名的互联网企业的面试笔试真题:1.extern的作用自己理解:应该需要区分extern在C语言中和C++语言中的作用,C语言中extern声明的函数和变量可以被该文件外部模块引用,C++语言中除了该作用还可以声明extern “C”声明一段代码编译连接的方法为C语言的方法。参考:其实ext
2016-05-19 21:02:17 424
转载 C++类型安全
C++类型安全http://blog.csdn.net/btwsmile/article/details/6693178什么是类型安全?类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容某个程序,判别的标准在于该程序是否隐含类型错
2016-05-19 20:57:27 284
转载 TCP的拥塞控制
TCP的拥塞控制1.引言 计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。这种情况就叫做拥塞。 拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,和流量控制不同,流量控制指点对点通信量
2016-05-19 20:05:23 208
转载 C语言常见字符串面试题
一些常用字符串操作函数的内部实现 memset:/* * memset - Fill a region of memory with the given value * @s: Pointer to the start of the area. * @c: The byte to fill the area with * @c
2016-05-19 16:38:36 584
转载 C语言字符串操作函数
C语言字符串操作函数1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. 字符串求长 - strlen5. 字符串连接 - strcat6. 字符串比较 - strcmp7. 计算字符串中的元音字符个数8. 判断一个字符串是否是回文1. 写一个函数实现字符串反转版本1 - while版
2016-05-19 16:34:55 285
转载 内存对齐详解
内存地址对齐,是一种在计算机内存中排列数据(表现为变量的地址)、访问数据(表现为CPU读取数据)的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐 。 为什么需要内存对齐?对齐有什么好处?是我们程序员来手动做内存对齐呢?还是编译器在进行自动优化的时候完成这项工作? 在现代计算机体系中,每次读写内存中数据,都是按字(word,4个字节
2016-05-19 11:15:09 204
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人