C/C++
文章平均质量分 64
0909LQ
小陈醋的代码进阶之路
展开
-
sizeof() 类大小,空类大小
一个类的实例化对象所占空间的大小? 注意不要说类的大小,是类的对象的大小.首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的。 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。 如果 Class A; A obj; 那么sizeof(A)==sizeof(obj) 那么sizeof(A)的大小和成员的大小总和是什么关系呢,很简单,一个对象的大转载 2015-07-20 21:33:03 · 404 阅读 · 0 评论 -
错题
从下列函数原形看,用GCC编译时,返回值类型为int的函数有?char F1(int n);int F2(char n);F3(int n);int *F4(int n);答案: BC,(函数的默认返回值类型为int)二叉树是一种树形结构,每个节点至多有两颗子树,下列一定是二叉树的是()红黑树B树AVL树B+树答案:A(红黑树)原创 2015-08-27 14:53:02 · 583 阅读 · 0 评论 -
c++模板类学习
1、模板的概念我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y){ return(x>y)?x:y ; }//函数2.float转载 2015-09-11 17:02:51 · 294 阅读 · 0 评论 -
C++中智能指针的设计和使用
原文地址:http://blog.csdn.net/hackbuteer1/article/details/7561235 智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计转载 2015-09-29 22:13:18 · 205 阅读 · 0 评论 -
友元实例:友元类及友元函数
学习了c++这么久,一直没有对友元进行了解,据说友元不是特别好用(据说,不是我说的),因此直到今天才去了解。其实友元确实不是很常用,但友元功能确实很实用,它不但能够释放类中的非公有成员,同时还能保证了类的封装性。用户可以有选择为具体的类或函数赋予“通行证”。还是比较灵活的。比如:某个类去访问另一个类的私有成成员,或者一个函数去访问某个类的私有成员等等,都可以使用友元来实现。 下面就转载 2015-09-29 22:14:20 · 396 阅读 · 0 评论 -
哈希表及处理冲突的方法
文章来源:http://blog.sina.com.cn/s/blog_6fd335bb0100v1ks.html哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表称为哈希表。这种方法的基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元;以后当查找关键字为k的元素时,转载 2015-10-06 10:57:55 · 377 阅读 · 0 评论 -
常用10个LINUX命令说明
LS命令-作用:显示目录内容,类似DOS下的DIR-格式:LS【options】【filename】-常用参数: >-a:all,不隐藏任何以"."字符开始的文件 >-l:使用较长的格式列出信息 >-r:按照文件名的逆序打印输出 >-F:加上文件类型的指示符 ls -lF | grep / 过滤 man ls 查询ls的帮助文件转载 2015-10-06 21:31:58 · 8234 阅读 · 1 评论 -
strstr的实现
函数名: strstr 功 能: 在串中查找指定字符串的第一次出现 用 法: char *strstr(char *str1, char *str2); 程序例: char* strstr ( const char * str1, const char * str2 ){char *cp = (char *) str1;//cast const ->varia转载 2015-10-06 22:30:34 · 299 阅读 · 0 评论 -
C++中typename和class的区别
在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?相信学习C++的人对class这个关键字都非常明白,class用于定义类,在模板引入c++后,最初定义模板的方法为: template...... 在这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typ转载 2015-10-08 22:22:07 · 564 阅读 · 0 评论 -
最短摘要生成算法
int FindAbstract(vector&sent,vector &keys,vector &rst) { map keyMp; set keySt; int beg = 0,end = 0,s = 0,t = 0,MinLen = 0x7fffffff; queue pos;//将所有关键词的下标放转载 2015-10-08 16:42:20 · 406 阅读 · 0 评论 -
华为2013年机试题
题目一:子串分离 题目描述: 通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。 如果输入“abc def gh i d”,结果将是abc,def,gh,i,d, 要求实现函数: void DivideString(const ch原创 2015-10-09 22:54:00 · 353 阅读 · 0 评论 -
C++中的explicit关键字
在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的。了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用。既然C++语言提供这种特性转载 2015-10-10 08:39:53 · 303 阅读 · 0 评论 -
逃出迷宫完整算法C++
迷宫图案,白色代表通道,黑色代表墙。 迷宫入口坐标(1,1),出口坐标(8,8) 0 1 2 3 4 5 6 7 8 9 0■■■■■■■■■■ 1■□□■□□□■□■ 2■□□■□□□■□■ 3■□□□□■■□□■ 4■□■■■□□□□■ 5■□□□■□□□□■ 6■□■□□□■□□■ 7■□■■■□■■□■ 8■■□□□□□□□■转载 2015-10-13 22:27:33 · 977 阅读 · 0 评论 -
如何定义和实现一个类的成员函数为回调函数
回调函数,就是由你自己写的,你需要调用另外一个函数,而这个函数的其中一个参数,就是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可以在回调函数里完成你要做的事。 B.如何定义和实现一个类的成员函数为回调函数 要定义和实现一个类的成员函数为回调函数需要做三件事: a.声明; b.定义; c.设置触发条件,就是在你的函数中转载 2015-11-22 20:43:34 · 596 阅读 · 0 评论 -
C++中的四种强制类型转换
C++的四种强制类型转换分别为:static_const,dynamic_cast,const_cast,reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C++类型的强制转换?新类型的强制类型转换可以提供更好的控制强制转换过程,允许控制各种不同类的转换。C++中风格是static_cast(content).C++风原创 2015-07-20 21:15:37 · 526 阅读 · 0 评论 -
关于返回指针以及动态申请内存
首先,常量和全局变量以及静态变量都存储于静态存储区,而局部变量在栈区; 其次,内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高转载 2015-08-06 12:35:40 · 411 阅读 · 0 评论 -
sizeof求结构体内存大小
首先不考虑设定字节对齐的大小:首先要找到结构体中或类中最大的变量的大小,比如struct A{char a;int b;double c;};在计算这个结构体的所占字节大小的时候,首先要获得结构体中最大的所占字节的大小,即double c的大小,即8;在计算最后的大小的时候,要补齐成最大的变量的整数倍,即8的整数倍;然后就是开始一个一个计算大小了a原创 2015-08-12 21:41:46 · 946 阅读 · 0 评论 -
new/delete和malloc/free的区别和联系
1.void malloc(long NumBytes),该函数分配了NumBytes大小的内存空间,返回的指针指向这块申请的内存,如果分配空间失败,函数返回NULLvoid free(void *FirstByte)该函数时释放之前maolloc申请的内存,free释放的是内存,不是指针2.new也是申请内存,其实它做了两件事情,首先它申请了一块内存,返回的指针指向这块内存;然后调用原创 2015-08-05 12:39:37 · 481 阅读 · 0 评论 -
C++拷贝构造函数
文章来源:http://blog.csdn.net/lwbeyond/article/details/6202256/一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyint a = 100; int b = a; 而类转载 2015-08-10 12:22:42 · 249 阅读 · 0 评论 -
C++拷贝构造函数(二)
1.什么是拷贝构造函数:拷贝构造函数嘛,当然就是拷贝和构造了。(其实很多名字,只要静下心来想一想,就真的是顾名思义呀)拷贝又称复制,因此拷贝构造函数又称复制构造函数。百度百科上是这样说的:拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)。此函数经常用在函数调用时用户定义类型的值传递及返回。转载 2015-08-10 12:26:29 · 393 阅读 · 1 评论 -
使用PostThreadMessage向工作线程发送消息
把window线程间传送消息仔细的看了一遍,觉得以前的理解很不深刻。说一说对PostThreadMessage的理解。 PostThreadMessage是一个线程体发送一个消息到指定的线程ID,其原型如下: BOOL PostThreadMessage( DWORD idThread,转载 2015-08-24 15:09:36 · 628 阅读 · 0 评论 -
c++多线程同步使用的对象
转自:http://blog.csdn.net/gukesdo/article/details/6857249线程的同步Critical section(临界区)用来实现“排他性占有”。适用范围是单一进程的各线程之间。它是:· 一个局部性对象,不是一个核心对象。· 快速而有效率。· 不能够同时有一个以上的cri转载 2015-08-24 15:45:01 · 357 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数转载 2015-07-29 22:48:42 · 317 阅读 · 0 评论 -
生产者消费者 C++
生产者消费者思路:首先定义一个缓冲区Buffer,当Buffer的大小小于BUFFERSIZE,则让生产者一直往里填充数据,满了后则让消费者开始往外拿数据,这里我们可以利用多线程中的Semaphore信号量同步机制,生产者初始化地最多的线程数为4个,这样当调用Waitforsingleproject(g_empty,INIFINITE);这样当我们每次调用一次这个函数,g_empty的引用计数原创 2015-08-19 20:44:19 · 442 阅读 · 0 评论 -
const放在函数后面
const关键字放于函数后面,表示该函数是一个常成员函数,在该函数内不能修改该类的成员变量。const关键字放于函数前面,表示该函数的返回值为常量,不可以修改。const 位于函数的参数里,如const T* ptr,表示T类型的指针ptr所指向的内容不可改变(T const *ptr亦是如此),但是ptr指针可以改变。T* const ptr表示T类型的指针ptr不可改变,但其所指原创 2015-07-30 19:59:12 · 1585 阅读 · 0 评论 -
指针和引用的区别
指针和引用的区别:(1)指针是一段地址,可以指向其所指的内存地址,而引用并不是地址,而是另一个变量的别名;(2)指针可以为NULL,引用不可以;(3)指针可以初始化很多次,比如可以为指针赋值很多次,但是对于引用而言,它只能初始化一次,因为它是一个变量的别名。(4)指针可以使用const关键词修饰,而引用不可以。(5)用sizeof()计算内存大小时,对于ptr得到的是指针的大小原创 2015-08-09 21:33:51 · 287 阅读 · 0 评论 -
C++之sstream格式流(常用于格式转换)
文章转自:http://blog.163.com/zhuandi_h/blog/static/180270288201291710222975/点击打开链接使用stringstream对象简化类型转换C++标准库中的提供了比ANSI C的更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换。为什么要学习如原创 2015-08-01 17:11:27 · 607 阅读 · 0 评论 -
vetor和数组的区别 vector和List的区别
(1)数组的定义需要指定其大小,且其大小是编译后能够确定的常量值(const),而vector则不需要指定其大小;(2)数组在动态分配空间之后,最后要手动delete/free分配的内存,而vector则会自动释放内存;(3)如果往数组中添加元素,则需要再重新申请空间,然后添加元素;但是vector则会判断当前空间是否够用,如果不够,则会再申请二倍的空间大小,不需要手动申请;(4)ve原创 2015-08-16 11:43:04 · 1181 阅读 · 0 评论 -
C++内存管理
[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支转载 2015-08-16 15:36:49 · 314 阅读 · 0 评论 -
C++多态和虚函数
所谓的C++多态,简单来讲就是,“一个接口,多个方法”, 程序上是这样的,通过父类指针来调用子类的函数;而多态的实现则是通过虚函数,我们将基类中的函数声明为虚函数,则在其类中会有一个虚函数表,里面存有虚函数的地址。当我们定义一个派生类的对象时,会在对象中产生一个虚函数表指针,该指针指向派生类中的虚函数表,当我们通过该对象调用函数(如果是虚函数)时,则会调用派生类中的虚函数。而虚函数表指原创 2015-08-16 17:25:34 · 258 阅读 · 0 评论 -
pragma pack(非常有用的字节对齐用法说明)
强调一点:#pragma pack(4)typedef struct{ char buf[3]; word a;}kk;#pragma pack()对齐的原则是min(sizeof(word ),4)=2,因此是2字节对齐,而不是我们认为的4字节对齐。这里有三点很重要:1.每个成员分别按自己的方式对齐,并能最小转载 2015-11-16 22:11:24 · 504 阅读 · 0 评论