
C/C++
文章平均质量分 52
YF_Li123
生活需要奔跑
展开
-
new/delete与malloc/free的区别是什么
相同点:C++中,申请动态内存和释放动态内存,两者都可以,且存储方式一样,申请的内存都在堆中,无法被操作系统自动回收不同点:(1)malloc/free是c/c++语言的标准库函数;new/delete是c++的运算符(2)对于类对象而言,malloc/free无法满足动态类对象的要求具体如下:a、new能够自动计算需要分配的内存空间,而malloc需要手工计算字节数;原创 2017-04-19 10:51:09 · 363 阅读 · 0 评论 -
C++四种类型转换
C++四种类型转换C++类型转换通常有三种不同的形式。可以分为“旧式转型”和“新式转型”。旧式转型C-style转型:(1)(T)expression //将expression转型为T函数风格: (2)T(expression) //将expression转型为T新式转型:C++提供了四种新式转型,为什么还要引入这四种新式转换呢?原因原创 2017-07-04 10:43:20 · 489 阅读 · 0 评论 -
C++的运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运转载 2017-07-04 19:54:11 · 289 阅读 · 0 评论 -
C++内存对齐原则
C++内存对齐原则(1)在没有#pragam pack宏的情况下,struct/class/union内存对齐原则有四个: 数据成员对齐规则:结构(struct)或联合(union)的数据成员,第一个数据成员放在offset为0的位置,以后每个数据成员存储的起始位置都是放在该数据成员大小的整数倍位置。如在32bit的机器上,int的大小为4,因此int的存储位置都是从4的整数倍原创 2017-07-04 21:16:43 · 1288 阅读 · 0 评论 -
C++ 指向const对象的指针和const指针
C++ 指向const对象的指针和const指针(1)指向const对象的指针 const int* p; 或 int const* p;这里的p是一个指向const对象的指针,const修饰的是指针p所指的对象,而不是修饰指针p。指针p本身不是const,定义时不需要初始化。这就意味着不能通过指针p去修改所指对象的值,但是指针p所指的对象可以修改。int a =原创 2017-07-05 08:39:42 · 899 阅读 · 0 评论 -
C++ 内联函数与宏
1. 内联函数在C++中我们通常定义以下函数来求两个整数的最大值:复制代码 代码如下:int max(int a, int b){ return a > b ? a : b;}为这么一个小的操作定义一个函数的好处有:① 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得多② 如果需要做任何修改,修改转载 2017-07-05 10:12:36 · 367 阅读 · 0 评论 -
解决C++ 无法从void 转换为LRESULT的方法详解
这个应该是一个MFC程序,ON_MESSAGE是添加消息响应函数,这句话就是添加热键WM_HOTKEY的响应函数。当你注册了热键之后,当用户按下热键,会执行OnHotKey函数来处理这个消息。错误就应该是OnHotKey这个函数的声明错误了,返回值应该是LRESULT. VS2008对消息的检查更为严格,以前在VC6下完全正常运行的消息映射在VS2008下编译不通过ON_MESSAGE(W转载 2017-06-05 19:29:31 · 1261 阅读 · 0 评论 -
C++ 链接指示器:extern ”C"
C++ 链接指示器:extern ”C"一、简述 好久就看到过extern “C"这个怪怪的符号了,于是拿来研究一下,果然还是很有料,百度有次面试就有问道。 编写C++程序有时需要调用其他语言编写的函数,比如C,Ada,FORTRAN等。这种混合编程编写的函数在C++中必须使用链接指示标注,指明函数所使用的语言。extern "C"就是其中一个。----转载 2017-07-06 21:42:12 · 510 阅读 · 0 评论 -
(亲测有效)Opencv3.1.0+VS2015+Win10 详细配置过程
一、下载并安装Opencv3.1.01、下载Opencv3.1.0,进入官网,点击opencv for windows即可下载。下载完毕后,我们得到其安装文件:opencv-3.1.0.exe 2、点击刚才下载的文件进行安装(其实就是解压而已),根据自己的电脑选择要解压的路径进行解压,例如我解压到了E:/Opencv文件夹里解压完以后打开安装的目录会发现里面原创 2017-07-20 11:32:41 · 7559 阅读 · 7 评论 -
C/C++ 生成随机数
C/C++ 生成随机数C/C++中生成随机数需要用到两个函数:rand()函数和srand()函数,C/C++中没有生成在一定范围内的随机数的内置函数,不过我们可以利用前边的两个函数来实现生成在一定范围内的随机数。1、rand()函数该函数是一个随机发生器,返回一个随机数值,范围在[0, RAND_MAX]之间。RAND_MAX定义在stdlib.h头文件中,C++中可原创 2017-07-17 11:02:16 · 54774 阅读 · 3 评论 -
C++ 多态性有哪些
C++多态性有哪些? 概念:指相同的对象收到不同的消息或者不同的对象收到相同的消息时产生的不同的实现动作。C++支持两种多态:编译时多态(静态)、运行时多态(动态)(1)编译时多态:就是在编译期确定的一种多态。在C++中主要体现在函数模板,这里需要注意,函数重载和多态无关,很多地方把函数重载误认为是编译多态,这是错误的??? 举例说明一下函数模板是如何体原创 2017-07-03 21:50:50 · 12767 阅读 · 2 评论 -
C++ 重载、覆盖与多态性
重载、覆盖与多态性(1)重载 重载是指有两个或多个函数名相同,但是函数的参数列表(参数的类型、个数、顺序)不同。对于重载函数的调用,在编译期间就已经确定了,是静态的,它们的地址在编译期间就绑定了,注意,这与多态无关!!!程序会更具不同的参数列来确定具体调用哪个函数。例如:double calculate(double);double calculate(double,原创 2017-07-03 21:54:25 · 728 阅读 · 0 评论 -
深入理解C++的静态绑定和动态绑定
深入理解C++的静态绑定和动态绑定 理解静态绑定和动态绑定,需要先理解四个名词: 1、对象的静态类型:对象在声明时采用的类型,是在编译期确定的。 2、对象的动态类型:目前所指对象的类型,是在运行期决定的。 对象的动态类型可以更改,但是静态类型无法更改。例如:class A{...};class B:public A{...};class C:public原创 2017-07-04 09:46:48 · 666 阅读 · 0 评论 -
C++ define、typdef和const
C++ define、typdef和const(1)typdef与definetypdef与define都是替一个对象取一个别名,以此来增强程序的可读性,但是它们在使用和作用上有几点不同:1.原理不同 #define是c语言中定义的语法,它是预处理指令,在预处理时进行简单而机械的字符串替换,不做正确性检查,不管含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误原创 2017-07-11 10:38:15 · 765 阅读 · 0 评论 -
C++如何实现类对象只能动态分配或只能静态分配
C++如何实现类对象只能动态分配或只能静态分配C++中建立类的对象有两种方式:(1)静态建立,例如 A a; 静态建立一个类对象,就是由编译器为对象在栈空间中分配内存。使用这种方法,是直接调用类的构造函数。(2)动态建立,例如 A* p = new A(); 动态建立一个类对象,就是使用new运算符为对象在堆空间中分配内存。这个过程分为两步:第一步执行o原创 2017-07-11 09:11:58 · 3121 阅读 · 1 评论 -
C++哪些数据必须使用初始化列表进行初始化?
C++哪些数据必须使用初始化列表进行初始化?(1)需要初始化的数据成员时对象的情况(包含继承情况下,通过显示调用父类的构造函数对父类数据成员进行初始化);(2)需要初始化const修饰的类成员或初始化引用数据成员;(3)子类初始化父类的私有成员说明:(1)需要初始化的数据成员时对象的情况(包含继承情况下,通过显示调用父类的构造函数对父类数据成员进行初始化);原创 2017-07-12 09:04:24 · 986 阅读 · 0 评论 -
阿里校招笔试——给定一个字符串S和有效单词的字典D,请确定可以插入到S中的最小空格数,使得最终的字符串完全由D中的有效单词组成,并输出解。
给定一个字符串S和有效单词的字典D,请确定可以插入到S中的最小空格数,使得最终的字符串完全由D中的有效单词组成,并输出解。如果没有解则应该输出n/a例如输入S = "ilikealibaba"D = ["i", "like", "ali", "liba", "baba", "alibaba"]Example Output:输出"i like alib原创 2017-08-25 21:12:49 · 4417 阅读 · 12 评论 -
C++之红黑树(一)
转载自:http://www.cnblogs.com/skywang12345/p/3245399.htmlR-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的特性:(1)每个节点或者是黑色,或者是红色。转载 2017-07-12 20:19:18 · 591 阅读 · 0 评论 -
C++中利用迭代器删除元素会发生什么?
利用迭代器删除元素会发生什么?(1)对于关联容器(如map,set,multimap,multiset),删除当前的iterator,仅仅会使当前的iterator失效,只要在erase时,递增当前的iterator即可。这是因为map之类的容器,使用了红黑树来实现,插入,删除一个结点不会对其他结点造成影响。使用方式如下例子:set valset = { 1,2,3,4,5,6 };原创 2017-07-12 08:08:26 · 9025 阅读 · 6 评论 -
C++中的public、protected和private
C++中的public、protected和private(1)用作类中的成员权限public成员:可以被该类中的函数、子类的函数、友元函数(包括全局友元函数、友元类中的成员函数)访问,也可以由该类的对象访问。protected成员:可以被该类中的函数、子类的函数、友元函数访问,但是不能别该类的对象访问。private成员:只能被该类中的函数、友元函数访问,其他原创 2017-07-12 09:53:06 · 523 阅读 · 0 评论 -
C/C++ 取整函数ceil(),floor()
使用floor函数:floor(x)返回的是小于或等于x的最大整数。如: floor(10.5) == 10 floor(-10.5) == -11使用ceil函数:ceil(x)返回的是大于x的最小整数。如: ceil(10.5) == 11 ceil(-10.5) ==-10 floor()是向负无穷大舍入,floor(-10.5) =原创 2017-04-19 14:15:40 · 791 阅读 · 0 评论 -
不使用if、?:、switch及其他判断语句如何找出两个int型变量中的最大值和最小值
8、不使用if、?:、switch及其他判断语句如何找出两个int型变量中的最大值和最小值方法一:利用绝对值的方法int max = ((a+b)+abs(a-b))/2int min = ((a+b)-abs(a-b))/2如果a>b,则max = a;如果a方法二:对变量的差值进行位移操作,通过其是否为非0值确定两个变量的大小int原创 2017-05-01 09:32:43 · 1594 阅读 · 0 评论 -
STL——Heap算法
STL——heap算法1、就排序而言,heap是一种特别的元素组织方式,应用于heap排序法(heapsort)。Heap可被视为一个以序列式集合实现而成的二叉树,具有两大性质:(1)第一个元素总是最大。(2)总是能够在对数时间内增加或移除一个元素。2、STL中提供了4个算法:默认的排序准则是 operator(1)make_heap():将某个区间内的元素转化原创 2017-04-19 17:08:45 · 663 阅读 · 0 评论 -
C/C++中的语言类型
C/C++ 语言中的语言类型一共有5种:表达式语句函数调用语句控制语句: if语句、switch语句(条件判断语句);do while语句、while语句、for语句(循环执行语句);break语句、continue语句、return语句、goto语句(转向语句)复合语句空语句注意:预处理指令不是语句原创 2017-04-20 09:38:29 · 803 阅读 · 0 评论 -
sizeof和strlen的区别比较
strlen()和sizeof()的区别strlen是一个函数,起到计数器的作用。它从内存的某个位置开始扫描,直到碰到第一个字符串结束符 '\0'为止,然后返回计数器值;sizeof是关键字,它以字节的形式给出其操作数的存储大小,操作数可以是表达式或括在括号里的类型名,存储大小有操作数类型决定;具体表现如下:sizeof是关键字,strlen是函数。sizeof后如果是类型必须原创 2017-04-20 10:04:41 · 691 阅读 · 0 评论 -
C++实现简单的走迷宫
c++实现简单走迷宫用n*n个小方格代表迷宫,每个方格上有一个字符0或1,0代表这个格子不能走,1代表这个格子可以走。只能一个格子一个走,而且只能从一个格子向它的上、下、左、右四个方向走,且不能重复。迷宫的入口和出口分别位于左上角和右下角,存在唯一的一条路径能够从入口到达出口,试着找出这条路径。例如,下图是一个迷宫,红色表示走出迷宫的一条路径输入:入原创 2017-04-20 19:29:16 · 12280 阅读 · 3 评论 -
位操作
位操作1 最有效的计算一个数x乘以2的n次方的方法虽然直接进行乘法操作符运算可以进行x乘以2的n次方,但该方法不是最优的,通过移位方法会比较高效,因为CPU直接支持位运算,效率最高。x将一个数左移n位,相当于乘以了2的n次方。例如:2引申:如何快速求取一个整数x的7倍?(x相当于将此整数乘以8,然后再减去原值,就得到了x的7倍。2 如何实原创 2017-04-23 21:07:49 · 599 阅读 · 0 评论 -
Windows的MAX_PATH
Windows的MAX_PATH转载自:http://www.cnblogs.com/findumars/p/3817091.htmlMAX_PATH的解释: 文件名最长256(ANSI),加上盘符(X:\)3字节,259字节,再加上结束符1字节,共260http://msdn.microsoft.com/en-us/library/windows/deskto转载 2017-06-04 21:48:01 · 1800 阅读 · 0 评论 -
解决win10 VC++6.0 应用程序无法正常运行 0xc0000142
解决win10 VC++6.0 应用程序无法正常运行 0xc0000142本文转载自:http://blog.youkuaiyun.com/w_9449/article/details/52864135,具体方法如下:下载好我分享的英文版msdev.exe(http://pan.baidu.com/s/1qYElbDq)解压出来,然后找你的vc的安装目录。如果你没有安装转载 2017-05-20 11:20:15 · 7011 阅读 · 1 评论 -
C++中stringstream的用法
stringstream类的使用C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。istringstream类用于执行C++风格的串流的输入操作。ostringstream类用于执行C风格的串流的输出操作。strstream类同时可以支持C风格的串流的输入输原创 2017-05-21 11:09:45 · 966 阅读 · 0 评论 -
C++中类的三种继承方式比较
C++中类的三种继承方式比较(1)公有继承 (public继承) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然为私有的,不能被这个派生类的子类所访问。(2)保护继承(proteced继承) 保护继承的特点是基类的所有公有成员和保护成员都作为派生类的保护成员,并且只能被它的派生类成员函数或友元函原创 2017-06-01 15:22:14 · 4852 阅读 · 0 评论 -
面向对象三大基本特性、五大基本原则
面向对象三大基本特性、五大基本原则(1)三大基本特性:封装、继承、多态 封装:指将客观事物抽象成类,每个类对自身的数据和方法实行保护。类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐蔽。C++中类是一种封装手段,采用类来描述客观事物的过程就是封装,本质上是对客观事物的抽象。 继承: 指可以让某个类型的对象获得另一个类型的对象原创 2017-06-01 15:51:14 · 657 阅读 · 0 评论 -
C++中只能使用初始化列表不能使用赋值的情况
C++中只能使用初始化列表不能使用赋值的情况一般分为3种:(1)当类中含有const(常量)、reference(引用)成员变量时,只能初始化,不能对它们进行赋值; 常量不能被赋值,只能被初始化,所以必须在初始化列表中完成,C++引用也一定要初始化,所以必须在初始化列表中完成。(2)基类的构造函数都需要初始化列表;(3)成员类型是没有默认原创 2017-06-01 20:14:04 · 1377 阅读 · 0 评论 -
指针与引用的比较
指针与引用的比较相同点: 指针指向一块内存,它的内容是所指内存的的地址;引用是某块内存的别名.不同点:(1)指针是一个实体,存放变量地址的一个变量,逻辑上是独立的;引用是个别名,逻辑上不独立,它的存在具有依附性。(2)作为参数传递时,两者不同。指针传递实质上是值传递的方式,它所传递的是一个地址值;引用传递会改变实参的值。(3)引用使用时不需要解引用(*),原创 2017-06-01 21:14:47 · 293 阅读 · 0 评论 -
不使用C/C++字符串库函数,如何自行编写strcpy( )函数
不使用C/C++字符串库函数,如何自行编写strcpy( )函数题目:已知strcpy( )函数原型如下:char* strcpy(char* strDest, const char* strSrc)1、不调用库函数,实现strcpy函数2、解释为什么要返回 char*首先第1问:char* strcpy(char* strDest, const char* str原创 2017-07-10 17:07:32 · 2742 阅读 · 0 评论 -
C++ limits头文件的用法(numeric_limits)
初学C++的时候,对这个模板很陌生,不知道它到底是做什么用的,今天拿起《C++标准程序库》,出现了它的讨论,所以决定好好研究一番。1. numeric_limits是什么?(A)《C++标准程序库》:一般来说,数值型别的极值是一个与平台相关的特性。C++标准程序库通过template numeric_limits提供这些极值,取代传统C语言,所采用的预处理常数。新的极值概念转载 2017-07-02 17:15:11 · 861 阅读 · 0 评论