![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++ 基本概念
文章平均质量分 72
Vast_Sea
这个作者很懒,什么都没留下…
展开
-
Saliency
ssssssssssssssssssssssssssssssssssssssssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA原创 2013-01-15 15:15:48 · 1148 阅读 · 0 评论 -
堆排序
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为转载 2012-10-26 09:47:50 · 497 阅读 · 0 评论 -
快速排序
快速排序是C.R.A.Hoare于1962年提出的一种分区交换排序。它采用了一种分治法(Divide-and-ConquerMethod)策略,分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。快速排序是目前己知的平均速度最快的一种排序方法。一、基本思想 快速排序方法的基本思想是:从待排序的n个记录中转载 2012-10-26 00:02:08 · 643 阅读 · 0 评论 -
哈希表_散列表
哈希表最差的时间复杂度O(n), 就是一个数组的顺序查找. 最好的时间复杂度O(1).哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级。实际上,这只需要几条机器指令。 对哈希表的使用者一一人来说,这是一瞬间的事。哈希表运算得非常快,在计算转载 2012-10-25 22:25:42 · 814 阅读 · 0 评论 -
二进制补码
数在计算机中是以二进制形式表示的。 数分为有符号数和无符号数。 原码、反码、补码都是有符号定点数的表示方法。 一个有符号定点数的最高位为符号位,0是正,1是副。 以下都以8位整数为例, 原码就是这个数本身的二进制形式。 例如0000001 就是+11000001 就是-1 正数的反码和补码都是和原码相同。 负数的反码是将其原码除符号位之外的各转载 2012-10-25 21:31:03 · 2274 阅读 · 0 评论 -
常用的算法的时间复杂度和空间复杂度
常用的算法的时间复杂度和空间复杂度排序法 最差时间分析平均时间复杂度 稳定度 空间复杂度 冒泡排序O(n2)O(n2)稳定 O(1) 快速排序O(n2)O(n*log2n)不稳定 O(log2n)~O(n)选择排序O(n2)O(n2)稳定转载 2012-10-25 22:43:49 · 726 阅读 · 0 评论 -
选择排序
选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的记录序列的最后,直到全部记录排序完毕。一、基本思想 选择排序是一种简单且直观的排序方法。选择排序的做法是:从待排序的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第一个记录交换位置;然后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将它与序列中的转载 2012-10-26 09:07:58 · 702 阅读 · 0 评论 -
插入排序
直接插入排序 折半插入排序 二路插入排序 表排序 希尔排序插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的数据序列的适当位置,直到全部记录插入完成为止。一、基本思想 假设待排序的记录存放在数组R[0…n-1]中。初始时,R[0]自成1个有序区,无序区为R[1…n-1]。从i=1起直至i= n-1为止,依次将R[转载 2012-10-26 09:26:10 · 638 阅读 · 0 评论 -
希尔排序
希尔排序(Shell Sort)是插入排序的一种。因D.L.Shell于1959年提出而得名。一、基本思想 对待排记录序列先作“宏观”调整,再作“微观”调整。 所谓“宏观”调整,指的是 “跳跃式”的插入排序。即:将记录序列分成若干子序列,每个子序列分别进行插入排序。关键是,这种子序列不是由相邻的记录构成的。假设将n个记录分成d个子序列,则这d个子序列分别为:转载 2012-10-26 09:58:24 · 673 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度
1、时间复杂度 (1)时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 (2)时间复杂度在转载 2012-10-25 22:37:18 · 4819 阅读 · 0 评论 -
归并排序
对于排序大列表数据,一个有效的排序算法是归并排序。类似于快速排序算法,其使用的是分治法来排序。归并排序的基本思想是:将两个或两个以上的有序子序列”归并”为一个有序序列。在内部排序中,通常采用的是2-路归并排序。即:将两个位置相邻的有序子序列“归并”为一个有序序列。算法描述归并操作的工作原理如下: 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 设定两个指针,转载 2012-10-26 10:07:58 · 514 阅读 · 0 评论 -
练习_3_数字和字符
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 itoa 实现char* myitoa(int nNum){ int nFlag = 1; int nLen = 1; if(nNum { nFlag = -1; nLen++; nNum = nNum * nFlag;原创 2012-11-01 21:16:16 · 645 阅读 · 0 评论 -
upcasting 的理解
什么叫“upcasting”?从派生类到基类的转换在继承表中是往上走的,因此叫upcasting,其总是安全的,因为其将一个特定的对象转换为了一个更通用的对象。唯一的变化是其可能失去某些成员,但它至少还是个instrument,因此编译器不用显式的强制转换。Upcasting和拷贝构造函数当编译器为派生类自动生成拷贝构造函数时,其将自动调用基类的拷贝构造函数,然后是各个成员对象的拷贝构转载 2012-10-31 13:39:43 · 3827 阅读 · 0 评论 -
构造和析构的顺序
当一个对象拥有过多的子对象时,有必要搞明白构造和析构的顺序。首先初始化基类,然后是自己的成员变量//: C14:Order.cpp// Constructor/destructor order#include using namespace std;ofstream out("order.out");#define CLASS(ID) class ID { /p转载 2012-10-31 13:37:03 · 1170 阅读 · 0 评论 -
研究operate = () 究竟是怎么运行的
Checkers& operator=(const Checkers& c) {// You must explicitly call the base-class version of operator=() or no base-class// assignment will happen:Game::operator=(c);cout return *this;}原创 2012-10-31 11:13:38 · 608 阅读 · 0 评论 -
冒泡排序
基本概念 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再转载 2012-10-25 23:44:47 · 420 阅读 · 0 评论 -
基数排序
分配排序的基本思想:排序过程无须比较关键字,而是通过“分配”和“收集”过程来实现排序。它们的时间复杂度可达到线性阶:O(n)。一、两种多关键码排序方法 最高位优先法(MSD法)。先按k1排序,将序列分成若干子序列,每个子序列中的记录具有相同的k1值;再按k2排序,将每个子序列分成更小的子序列;然后,对后面的关键码继续同样的排序分成更小的子序列,直到按kd排序分组分成最小的子序列后,最后将转载 2012-10-26 10:10:29 · 392 阅读 · 0 评论 -
图解数据结构——排序排序(Sort)
十四、排序(Sort)这可能是最有趣的一节。排序的考题,在各大公司的笔试里最喜欢出了,但我看多数考得都很简单,通常懂得冒泡排序就差不多了,确实,我在刚学数据机构时候,觉得冒泡排序真的很“精妙”,我怎么就想不出呢?呵呵,其实冒泡通常是效率最差的排序算法,差多少?请看本文,你一定不会后悔的。1、冒泡排序(Bubbler Sort)前面刚说了冒泡排序的坏话,但冒泡排序也有其优点,那就是好理解转载 2012-10-26 10:21:01 · 839 阅读 · 0 评论 -
深入理解sizeof+C语言数据类型+内存补齐
From: http://blog.sina.com.cn/s/blog_65db99840100kvm8.html http://www.vckbase.com/index.php/wv/789 二、由几个例子说开去。第一个例子:01.char* ss = "0123456789";02.sizeof(ss) 结果 4 ===》ss是指向转载 2012-10-27 23:58:04 · 1048 阅读 · 0 评论 -
C++中的模板
From: http://www.cnblogs.com/BeyondAnyTime/archive/2012/08/13/2636963.htmltemplateint CompareNums(T1 num1, T2 num2){ if(num1 { return 1; } else if(num2 > num1)转载 2012-11-07 08:51:24 · 949 阅读 · 0 评论 -
浮点数存储格式
浮点数有两个基础类型:float和double。float占据4个字节,double占据8个字节。下面将以float类型为例,介绍浮点数的存储方式。double类型和float类型的存储方式雷同。 1.浮点数的存储方式 浮点数的存储格式比较特殊,下图是4字节的float变量的存储示意图: 根据IEEE754浮点数表示标准,一个float变量在存储转载 2012-10-28 21:25:53 · 1131 阅读 · 0 评论 -
sprintf
printf 可能是许多程序员在开始学习C 语言时接触到的第二个函数(我猜第一个是main),说起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf 了解多吗?在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命转载 2012-10-28 16:17:39 · 561 阅读 · 0 评论 -
从小函数实现看应聘者的编程素质(atoi.strcmp...)
From: http://blog.csdn.net/winglet/article/details/2831605在程序员面试的时候,面试官通常会让你实现一个或几个C语言里的库函数,以此来检查你的编程功底。类似的函数实现有atoi.itoa.atof.strcmp.strcpy.memset.memcpy等等。在平时的编程中,我们可能极少有机会要自己实现这些函数。但是面试官却转载 2012-10-28 22:20:21 · 1840 阅读 · 2 评论 -
不清楚数组定义时的区别
void main(){ char a = 1; char c[] = "1234567890"; char *p ="1234567890"; a = c[1]; a = p[1]; return;}charp[]="hello world!";p 是怎样一种赋值机制呢?原创 2012-10-27 21:01:13 · 485 阅读 · 0 评论 -
C++中的操作符重载
From: http://www.cnblogs.com/BeyondAnyTime/archive/2012/09/01/2666570.html一、什么是操作符重载操作符重载可以分为两部分:“操作符”和“重载”。说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载。运算符重载和函数重载的不同之处在于操作符重载重载的一定是操作符。我们不转载 2012-11-06 14:03:07 · 582 阅读 · 0 评论 -
int, float, double 直接转换
其实学习过编程的同学,都对这三个东西再熟悉不过了。int,又称作整型,在.net中特指的是Int32,为32位长度的有符号整型变量。float,单精度浮点数,32位长度,1位符号位,8位指数位与23位数据位,在.net中又称为Single。double,64位长度的双精度浮点数,1位符号位,11位指数位,52位数据位。它们互相的关系就是:int可以稳式转换成float和double,float只能转载 2012-10-28 14:18:55 · 8094 阅读 · 3 评论 -
char *和char数组的区别(深拷贝和浅拷贝的观点)以及内核访问用户空间
From : http://blog.csdn.net/dog250/article/details/5303372char *和char数组真的相同吗?我们以实例为证: typedef struct { char * s1; char * s2; }PARAM,*PPARAM; int main(int argc, char *argv转载 2012-10-27 23:59:23 · 4978 阅读 · 0 评论 -
C++虚函数表解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。虚函数表 对C++ 了解的转载 2012-10-26 11:17:22 · 408 阅读 · 0 评论 -
C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast
在C++中,存在类型转换,通常意味着存在缺陷(并非绝对)。所以,对于类型转换,有如下几个原则:(1)尽量避免类型转换,包括隐式的类型转换(2)如果需要类型转换,尽量使用显式的类型转换,在编译期间转换(3)避免使用reinterpret_cast和老式的强制类型转换操作符通常,隐式的类型转换会导致警告,需要重视这些警告,并使用显式的类型转换代替,例如static_cast代替一些算术转载 2012-10-26 10:45:02 · 439 阅读 · 0 评论 -
C/C++中作用域详解
作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的最近一对括号确定。(1) 全局变量: 全局变量是在所有函数体的外部定义的,程序的所在部分(甚至其它文件中的代码)都可以使用。全局变量不受作用域的影响(也就是说,全局变量的生命期一直到程序的转载 2012-10-26 10:43:49 · 466 阅读 · 0 评论 -
内排序方法总结
一、按平均时间将排序分为四类(1)平方阶(O(n2))排序 一般称为简单排序,例如插入、选择和冒泡排序;(2)线性对数阶(O(nlgn))排序 如快速、堆和归并排序;(3)O(n1+£)阶排序 £是介于0和1之间的常数,即0(4)线性阶(O(n))排序 如基数排序。二、各种排序方法比较 简单排序中插入最好,快速排序最快转载 2012-10-26 10:31:07 · 515 阅读 · 0 评论 -
c/c++ && 数据结构
http://www.cnblogs.com/yc_sunniwell/http://www.cnblogs.com/xiaosuo/category/216568.html原创 2012-10-26 10:24:14 · 408 阅读 · 0 评论 -
C++中数据类型字节数和机器字长关系
机器字长:是指计算机进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算)。机器字长也就是运算器进行定点数运算的字长,通常也是CPU内部数据通路的宽度。现在一般为32位即4个字节,也有64位和16位的。 算术类型的存储空间按照机器而定。一般,short类型为半个机器字长,int为一个机器字长,long为1或2个机器字长,float为一个机器字长,double为两个字,lo转载 2012-10-16 14:01:14 · 4946 阅读 · 0 评论 -
拷贝构造函数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%class X { public: //X(){}; X(const X& a){std::cout ~X(){std::cout};编译:error C2512: “X”: 没有合适的默认构造转载 2012-10-31 10:09:18 · 642 阅读 · 0 评论 -
C++中变量的作用域与生命周期
C++就是这么规定的,静态全局变量与全局变量的唯一区别就是作用域不同。 对一个C++变量来说,有两个属性非常重要:作用域和生命周期,它们从两个不同的维度描述了一个变量--时间和空间。顾名思义,作用域就是一个变量可以被引用的范围,如:全局作用域、文件作用域、局部作用域;而生命周期就是这个变量可以被引用的时间段。不同生命周期的变量,在程序内存中的分布位置是不一样的。一个程序的内存分为代码区转载 2012-10-17 15:39:56 · 507 阅读 · 0 评论 -
重载、覆盖、多态与函数隐藏--1
首先,我们来看一个非常简单的例子,理解一下什么叫函数隐藏hide。#include using namespace std;class Base{public: void fun() { cout };class Derive : public Base{public: void fun(int i) { cout };int m转载 2012-10-17 10:30:25 · 425 阅读 · 0 评论 -
C++ const 关键字
C++ constconst在C++中使用很频繁,并且它的功能也很强大。定义一个常数const int N = 128; //定义一个常整型变量常数据指针int n = 5, m = 6;const int *p = &n; // *p不能更改,而p可以改*p = 8; //error p转载 2012-10-17 09:04:35 · 386 阅读 · 0 评论 -
无符号变量转有符号变量 && C++整型赋值越界处理(VC++)
今天一个很偶然的机会,需要回答一个将无符号数据存到有符号变量的问题。我编码如下,结果很有意思,我是在VC6里调试的,有高人看到可否帮忙指点下。int main(){ unsigned short temp1 = 65535; short temp2 = temp1; unsigned short temp3 = (unsigned short)temp2;转载 2012-10-16 16:12:59 · 2378 阅读 · 1 评论 -
《C陷阱与缺陷》读书笔记-----2
1.编译器中的词法分析器负责将程序分解为一个个符号。C语言中,符号之间的空白 (包括Space ,Tab , Enter) 都将被忽略,但一个符号的中间不能有空白,否则可能被解释成为另一个或几个符号。 2.编译器将程序分解成符号的方法是从左到右逐个字符读入,如果该字符可能会组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入转载 2012-10-16 19:50:16 · 803 阅读 · 0 评论 -
C/C++基本数据类型所占字节数
关于这个基本的问题,很早以前就很清楚了,C标准中并没有具体给出规定那个基本类型应该是多少字节数,而且这个也与机器、OS、编译器有关,比如同样是在32bits的操作系统系,VC++的编译器下int类型为占4个字节;而tuborC下则是2个字节。所以int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的):siz转载 2012-10-16 14:06:08 · 78454 阅读 · 2 评论