
c/c++
赢在拼搏中
这个作者很懒,什么都没留下…
展开
-
内联函数
c++从c中继承的一个重要特征是效率。宏可以保证很高效率,因为预处理器直接用宏代码区代替宏调用,所以没有了参数压栈、call、return、返回参数等开销,所有的工作由预处理器来完成。 但是宏存在两个缺陷:宏并不总是想一个函数调用(当宏调用使用表达式做参数、符号优先级问题等引起),且c++预处理器不允许访问类的成员函数。为此,c++引入了内联函数。内联函数和普通函数的唯一区别原创 2016-05-02 10:19:15 · 457 阅读 · 0 评论 -
C++中 string 的用法大全
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 首先,为了在我们的程序中使用string原创 2016-08-13 21:20:38 · 742 阅读 · 0 评论 -
C/C++ sort函数的用法
sort函数的用法做ACM题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件。 这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,原创 2016-08-13 21:21:35 · 1329 阅读 · 0 评论 -
内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理]
一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- 程序结束释放原创 2016-08-13 21:28:01 · 502 阅读 · 0 评论 -
C++中自增自减运算符疑惑大全
一、有关前置与后置的区别#include using namespace std;int main(){ int i = 0,j; cout "对运算符优先级进行检验" << endl; cout "i = 0" "-i++\t=\t" << -i++ << endl; cout "i\t=\t" << i << endl; i = 0;转载 2016-08-13 21:35:32 · 887 阅读 · 0 评论 -
C++中关于指针的理解
一、指针 1. 指针的值是一个地址,通过间接寻址运算符*来区分地址与指针所指地址保存的值区分开。 一个变量的地址称为该变量的指针。 如果有一个变量是用来专门存放另一变量地址(即指针)的,则称它为指针变量。 要区分指针和指针变量!!! *实际上是运算符重载(C++中提及),表示指向。 例如: int *p,i; p = &i; p的值是i的地址,*p的值为i的值。转载 2016-08-13 21:36:47 · 910 阅读 · 0 评论 -
C++处理字符串的方法——字符串类与字符串变量
一、字符数组 C语言中可以设置一个二维数组,例如str[3][30],大小为3x30,即有3行30列,每一行可以容纳30个字符,可以把str[0],str[1],str[2]看做三个一维字符数组,它们各自有30个元素。 例如:有三个字符串,要求找出其中最大者(要求用函数调用)#include #include using namespace std;int main(){转载 2016-08-13 21:37:38 · 1682 阅读 · 0 评论 -
指针和引用的区别
C++中有几种复合类型,这里介绍引用和指针的区别 引用其实就是变量的别名,并且引用底层就用指针实现的,只不过引用跟初始化的变量已经绑定了,在作用域中不能再改变引用绑定的实体了。现按条列出指针和引用的区别: 1.引用是变量的别名,在定义的时候必须进行初始化,而指针可以先定义,再进行赋值int i,&j = i;int &j; //错误!必须初始化!int *j = &i;i转载 2016-08-13 21:40:23 · 295 阅读 · 0 评论 -
new/delete和malloc/free的区别
一,malloc/free: void*malloc(size_t size):该函数分配了size个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。malloc 返回值的类型是void*,所以函数本身并不知道要申请的内存用来存储什么类型的数据。在调用malloc时一般需要显式地进行类型转换,将void * 转换成所需要的指针类型。原创 2016-08-13 21:45:12 · 275 阅读 · 0 评论 -
C++中的覆盖和隐藏
C++中的覆盖和隐藏,是个令人头疼的问题,下面写几点自己的认识。首先,参考c++高质量编程指南,给出覆盖的特征:覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。再给出隐藏的特征:“隐藏”是指派生类的函数屏蔽了与其同名的基类转载 2016-08-13 21:46:23 · 809 阅读 · 0 评论 -
C语言printf函数输出表达式中的计算顺序
Turbo C,VC++6.0都是按从右到左进行计算的,但注意自增和自减运算。 看下面一个例子:#include main(){ int i=8; printf%d, %d, %d, %dn",i,--i,i,i--); } 运行结果:7, 7, 8, 8为什么会有这样的结果呢?这就涉及到自增、自减运算符的问题了。++i i自增1后再参原创 2016-08-13 21:19:16 · 4762 阅读 · 1 评论 -
深入分析C++引用
背景在 c/c++ 中,访问一个变量只能通过两种方式被访问,传递,或者查询。这两种方式是:1. 通过值 访问 / 传递变量2. 通过地址 访问 / 传递变量 – 这种方法就是指针 除此之外没有第三种访问和传递变量值的方法。引用变量也就是个指针变量,它也拥有内存空间。最关键的是引用是一种会被编译器自动解引用的指针。很难相信么?让我们来看看吧。。。下面是一原创 2016-08-13 21:18:08 · 228 阅读 · 0 评论 -
内联函数和宏定义的区别
用内联取代宏:1.内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员函数,自动转化为内联函数。文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #d转载 2016-05-02 13:27:46 · 343 阅读 · 0 评论 -
c++名字控制
函数内部静态对象 如果内部类型的静态变量未初始化,编译器会将其初始化为零。但用户自定义类型必须使用构造函数来初始化。 内部连接的名字可以放在一个头文件中而不担心链接时发生冲突。如通常放在头文件中的static、const(c++默认内部连接、c默认外部连接)、内联函数在默认的情况下是内部连接的。 全局对象都是隐含为静态存储,存储在静态存储区。静态全局原创 2016-05-03 09:41:44 · 537 阅读 · 0 评论 -
c++中的引用和拷贝构造函数
引用的规则: 1)创建引用时必须进行初始化(指针可以在任何时候初始化)。 2)一旦一个引用被初始化为指向一个对象,它就不能改变为另一个对象的引用(指针可以在任何时候指向两一个对象)。 3)不可能有NULL引用。必须确保引用是和一块合法的存储单元关联。引用最常见的地方是函数参数和返回值中。原创 2016-05-04 14:47:38 · 549 阅读 · 0 评论 -
线程安全和线程不安全理解
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据===========================================================转载 2016-07-24 12:08:16 · 255 阅读 · 0 评论 -
C实现bitmap位图
事实上,我们是用每一个 元素表示一个32位的二进制字符串,这样这个元素可以保留相邻32个号码是否存在的信息,数组范围就下降到10000000/32了.例如对于号码 89256,由于89256 mod 32=2789…8,这样我们应该置a[2789]中32位字符串的第8位(从低位数起)为1.基本的操作:#define WORD 32#define SHIFT 5 ////移动5个位转载 2016-07-25 19:14:49 · 3769 阅读 · 0 评论 -
const的使用
一、const的使用1、定义常量(1)const修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。 TYPE const ValueName = value; const TYPE ValueName = value;(2)将const改为外部连接,作用于扩大至全局,编译时会分配内存,转载 2016-07-27 14:22:53 · 302 阅读 · 0 评论 -
红黑树和AVL树
1 好处 及 用途 红黑树 并不追求“完全平衡 ”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。红黑树能够以 O(log2 n) 的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解转载 2016-07-27 14:58:57 · 465 阅读 · 0 评论 -
指针函数与函数指针的区别
1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 当一个函数声明其返回值原创 2016-08-19 09:13:13 · 304 阅读 · 0 评论 -
接口和抽象类有什么区别
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。 1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。。。”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中. 2.接口基本上不具备原创 2016-08-19 09:34:55 · 327 阅读 · 0 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plain copyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。转载 2016-08-12 09:08:46 · 245 阅读 · 0 评论 -
常见排序算法小结
排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。 我不喜欢死记硬背,我更偏向于弄清来龙去脉,理解性地记忆。比如下面这张图,我们将围绕这张图来思考几个问题。 上面的这张图来自一个PPT。它概括了数据结构中的所有常见转载 2016-08-14 12:43:45 · 349 阅读 · 0 评论