C/C++基础
文章平均质量分 58
鱼翅1013
这个作者很懒,什么都没留下…
展开
-
C/C++笔试、面试题目大汇总
1.求下面函数的返回值(微软)int func(x){int countx = 0;while(x){countx ++;x = x&(x-1);}return countx;} 假定x = 9999。 答案:8思路:将x转化为2进制,看含有的1的个数。2. 什么是“引用”?申明和使用“引用”要注意哪些问题?答:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量转载 2008-08-07 18:44:00 · 582 阅读 · 0 评论 -
map使用总结
之前在使用map类的过程中,模板参数的后两项,Allocator>均是采用采用默认情况。 但是默认情况下如果关键字为:string类的,则将会出现错误。 错误的原因就是默认的Traits为less,而less的实现为:template struct less : binary_function { bool operator()(const原创 2009-12-20 12:01:00 · 553 阅读 · 0 评论 -
关于读取 Unicode文件
以前做开发的过程中,遇到读取文件的情况,基本都是ANSI文件,而没有遇到过UNICODE文件。最近在读取UNICODE 的文件过程中,却遇到了一些意想不到的问题。现总结如下:(1)文件的打开模式,读取ANSI文件时候,fopen(,"r"),CFile(,modeRead),其默认情况下是按文本模式来进行读取。但是如果在文本模式下去wchar_t去读取数据,却经常发生一些意想不到的原创 2009-12-19 15:14:00 · 983 阅读 · 0 评论 -
ASCII码表
SCII码对照表下表列出了字符集中的 0 - 127。 代码 字符 代码 字符 代码 字符 代码 字符 0 32[空格]64@96`1 33!65A97a2 34"66B98b原创 2009-12-21 17:41:00 · 684 阅读 · 0 评论 -
Trie树|字典树的简介及实现
<br />Trie,又称字典树、单词查找树,是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。<br />相对来说,Trie树是一种比较简单的数据结构.理解起来比较简单,正所谓简单的东西也得付出代价.故Trie树也有它的缺点,Trie树的内存消耗非常大.当然,或许用左儿子右兄弟的方法建树的话,可能会好点.<br /><br />其基本性质可以归纳为:<br />1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。 <br />2. 从根节点到某一节点,路径上经转载 2010-07-01 10:04:00 · 535 阅读 · 0 评论 -
C++编程思想(卷二):异常处理
<br />C++编程思想(卷二):异常处理<br />www.firnow.com 时间 : 2009-11-09 作者:匿名 编辑:小张 点击: 105 [ 评论 ]<br />-<br />-<br />关键字throw将导致一系列事情的发生:<br />首先,它将创建程序所抛出的对象的一个拷贝。<br />然后,包含throw表达式的函数返回了这个对象,即使该函数原先并未设计为返回这种对象类型。<br />另外,异常发生之前创建的局部对象被销毁(调用对象的析构函数)。<br />原创 2010-05-31 15:13:00 · 728 阅读 · 0 评论 -
判断链表是否存在环并找出环的入口
<br />有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。<br />问题:<br />1、如何判断一个链表是不是这类链表? <br />如果链表为存在环,如果找到环的入口点? <br />解答:<br />一、判断链表是否存在环,办法为:<br />设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先转载 2010-06-08 11:35:00 · 861 阅读 · 0 评论 -
获取比自己大的,最小的8的倍数
<br /> 在STL中,内存管理中,要求能够获取内存大小为8的整数倍。利于管理内存,而且在内存操作中以8的倍数操作最为方便。<br /> 比自己大的最小数可以考虑先进行+(8-1)小的数,此时获得的结果肯定比最小的8的倍数大。只需要减去超出的部分,即可获得最小的8的倍数值。超出的部分,(肯定《=(8-1)),置为0。所以操作为:(计算值+(8-1))&~(8-1)=最小的8的倍数。<br /> <br /> 具体代码为:<br /><br />const int _ALIGN=8;<原创 2010-12-30 10:11:00 · 1419 阅读 · 0 评论 -
C++自增运算符进行重载
<br /> 在C++中自增运算符分为前置++和后置++。前置++是先进行+1操作,然后返回+1之后的值;后置++是先返回值,然后再进行+1操作。<br /> 仿照《STL源码剖析》,写的自增操作。<br />#include<iostream><br />using namespace std;<br /> <br />class My{<br />private:<br />int m_i;<br />public:<br />friend ostream& operator<<(o原创 2010-12-29 23:16:00 · 2124 阅读 · 0 评论 -
vector 和list
<br /> 之前一段时间对STL中的vector 和 list,使用情况有些不太明白。最近了解了点区别,现在总结一些。<br /> vector提供了内存预申请机制,也就是每次vector向系统申请的内存大于要求vector申请的内存空间大小。在STL实现中,如果预申请的空间不够用,系统将会申请原大小2倍的空间。vector在尾部添加和删除是最高效的,因为对于尾部的定位有一个特定的变量来存储。在非尾部的插入和删除会导致vector 空间中元素的移动,代价是相当的高,元素移动肯定会导致原原创 2010-12-30 14:42:00 · 632 阅读 · 0 评论 -
GCC——分支预测(likely和unlikey)
最近在拜读一个项目源代码的过程中,发现了一个有意思的GCC特性,现将这个特性总结如下: 开发人员在开发服务的过程中,可以根据业务逻辑的特性来判断当前的条件语句被执行的概率情况,经常被执行到的代码片段可以紧邻顺序执行的代码片段后边,偶尔被执行到的条件代码片段被放到其他代码片段,从而减少代码在顺序执行过程中的代码上下文的跳转次数,达到提高程序执行效率的目的。这种方式的优化,需要严重的依原创 2013-12-14 13:11:41 · 3464 阅读 · 0 评论 -
深入分析 Linux 内核链表
转载地址:http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时转载 2013-12-28 16:37:45 · 1071 阅读 · 0 评论 -
频繁分配释放内存导致的性能问题的分析
现象1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C program命令查看,发现majflt每秒增量为0,而minflt每秒增量大于10000。初步分析majflt代表major fault,中文名叫大错误,minflt代表minor fa转载 2014-01-04 21:35:21 · 1190 阅读 · 1 评论 -
获取Core时函数栈的方法
在Linux服务开发过程中,经常会遇到各种问题,其中一种快速高效解决问题的策略就是:当服务处理异常时,操作系统自动产生Core文件,通过GDB调试工具分析Core文件,还原异常发生时服务的函数栈调用层次,继而快速的分析出导致异常发生的逻辑代码。Core文件,本质就是服务发生异常时的内存映像,如果服务占用的内存空间非常大,尤其是在64位操作系统下,例如占用20G的内存,写入磁盘Core文件的耗时会比原创 2014-03-01 14:36:17 · 1792 阅读 · 0 评论 -
字符数组
最近在用动态数组进行存储数据,而最后进行delete的时候,出现一个assert,虽然解决的比较顺利,但还是想在此总结一下以巩固学习。 1、char szBuf[] = "123456"; strlen(szBuf):6 ;sizeof(szBuf):7. 静态数组类型的字符串,相信都非常的了解。strlen是计算的字符串的长度,而sizeof计算的是数组的长度原创 2009-12-19 08:36:00 · 559 阅读 · 0 评论 -
wchar_t与char的比较学习
1、wchar_t为两个字节,即16位;char为1个字节,即8位;2、wchar_t能够存储的数字为0XFF的(char存储的数字)倍;3、将char赋值给wchar_t,则wchar_t将其存储到低位;4、wchar_t 相较于char只是多了一个8位而已,其他的存储方式基本是相同的。例如,在 wchar_t存储汉字的情况下,则需要两个char类型的变量来进行存储一个wchar原创 2009-12-19 08:33:00 · 1541 阅读 · 0 评论 -
C语言常用字符串处理函数
1、函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source);2、函数名: strcat 功 能: 字符串拼接函数 用 法: char *strcat(char *destin, char *source);3、函数名:原创 2009-12-08 14:55:00 · 670 阅读 · 0 评论 -
几个排序
//////////////////////////////////////////////////////////////////////////// 直接插入排序// 顺序的把待排序的数据元素按照关键字插入已经排序好的子集合中,// 但子集合与原集合个数相同时结束比较。//////////////////////////////原创 2008-08-06 09:54:00 · 519 阅读 · 0 评论 -
C++ 的构造/析构/赋值/拷贝函数比较
构造函数、析构函数与赋值函数是每个类最基本的函数。每个类只有一个析构函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)和 多个赋值函数(除了同类的赋值以外,还有其他的赋值方法)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四个缺省的函数,如A(void); // 缺省的无参数构造函数A(const A &a);转载 2008-10-03 14:44:00 · 607 阅读 · 0 评论 -
Sizeof与Strlen的区别与联系
1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以/0结尾的。 sizeof还可以用函数做参数,比如: short f(); printf("%d/n",转载 2008-10-03 14:47:00 · 520 阅读 · 0 评论 -
空指针和迷途指针的区别
解释代码:#include int main(){ int *pInt = new int; *pInt=10; cout delete pInt; pInt=0; *pInt=20; // oh no, this was deleled. cout return 0;}//Compile this program successfully,but when running i转载 2008-10-03 14:49:00 · 1227 阅读 · 0 评论 -
如何写优雅的代码(3)——合理选择函数形参
//======================================================================== //TITLE: // 如何写优雅的代码(3)——合理选择函数形参 //AUTHOR: // norains //DATE: // Tuesday 21-July-200转载 2009-09-28 10:19:00 · 647 阅读 · 0 评论 -
如何写优雅的代码(2)——#define?const?还是enum?
//======================================================================== //TITLE: // 如何写优雅的代码(2)——#define?const?还是enum? //AUTHOR: // norains //DATE: // Tuesday转载 2009-09-28 10:14:00 · 676 阅读 · 0 评论 -
如何写优雅的代码(1)——灵活使用goto和__try
//========================================================================//TITLE:// 如何写优雅的代码(1)——灵活使用goto和__try//AUTHOR:// norains//DATE:// Thursday 16-July-2009//Environment:转载 2009-09-28 10:12:00 · 926 阅读 · 0 评论 -
C/C++返回内部静态成员的陷阱
C/C++返回内部静态成员的陷阱陈皓背景在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼。这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员。如果你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存。转载 2009-09-28 14:08:00 · 524 阅读 · 0 评论 -
const”类型的指针“
1.指向const对象的指针 const int *p; 这个p是一个指向int类型const对象的指针,const限定了指针p所指向的类型,而并非p本身。也就是说p本身并不是const。在定义时不需要对它进行初始化,还可以给p重新赋值,使其指向另一个const对象。但不能通过p修改所指向对象的值。 示例1:int a=0; p=&a; 可以。 示例2:*p=20原创 2009-10-11 11:45:00 · 851 阅读 · 1 评论 -
栈和堆的区别
1、内存分配方面: 堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。 栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、申请方式方面: 堆:需要转载 2009-11-14 18:50:00 · 736 阅读 · 0 评论 -
#pragma pack(push,1) (pop)
本文主要包括二个部分,第一部分重点介绍在VC中,怎么样采用sizeof来求结构的大小,以及容易出现的问题,并给出解决问题的方法,第二部分总结出VC中sizeof的主要用法。1、 sizeof应用在结构上的情况请看下面的结构:struct MyStruct{double dda1;char dda;int type};对结构MyStruc转载 2009-11-24 09:36:00 · 2163 阅读 · 2 评论 -
找出数组中不成对的数据
给出2n+1个数 其中有n个数是成对出现的 找出里面只出现了一次的那个数 看这样行不行: 假设 这2n+1个数是int的,则借助两个临时变量可以实现目的 假设数据存放在int Data[2*N+1]里 int Find(int Data[],int N) { int i,int j; j=0;原创 2009-12-06 16:57:00 · 1022 阅读 · 0 评论 -
CMAP原理及其在MFC中的实现
一、 Map的基本知识 映射(Map),又称为字典(Dictionary),是由关键字(Key)及其对应的元素值(Value)所组成的元素单元(Element)的表单式集合。 通常,对于Map而言,使用给定的Key,可以迅速地从单元集合中检索到相应的元素。因此,在需要对大量数据进行查找操作而查找的性能又占据重要地位的场合,Map无疑是一种较理想的容器。譬如,在MFC转载 2009-12-08 11:29:00 · 1455 阅读 · 0 评论 -
gdb小结
最近频繁用到一些GDB看上比较高大上的点,总结一下以作备忘。1、gdb脚本调试过程中,经常会用到需要频繁的设置相同的断点,每次在gdb启动之后重新设置一遍,会让人无比的蛋疼,这个时候采用gdb脚本无意会减轻点淡淡的忧伤。使用gdb脚本主要有两种方式:1)gdb启动时把gdb的调试命令全部写入到.gdbinit文件中。在gdb启动时,会自动读取.gdbinit文件的内容,执行对应的g原创 2014-07-27 09:54:09 · 2128 阅读 · 1 评论