C++
文章平均质量分 65
a199228
这个作者很懒,什么都没留下…
展开
-
探寻C++最快的读取文件的方案
在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的,C++选手只能干着急。难道C++真的低Pascal一等吗?答案是不言而喻的。一个进阶的方法是把数据一下子读进来,然后再转化字符串,这种方法传说中很不错,转载 2011-11-29 09:03:57 · 2409 阅读 · 2 评论 -
内存对齐
本文主要包括二个部分,第一部分重点介绍在VC中,怎么样采用sizeof来求结构的大小,以及容易出现的问题,并给出解决问题的方法,第二部分总结出VC中sizeof的主要用法。1、 sizeof应用在结构上的情况请看下面的结构:struct MyStruct{do原创 2011-08-15 23:09:10 · 381 阅读 · 0 评论 -
C++虚函数表解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2011-08-13 21:20:46 · 335 阅读 · 0 评论 -
static_cast与dynamic_cast的联系与区别
1.static_cast在编译时期强制转换,dynamic_cast在运行时期转换(较安全) 2.static_cast是c语言的强制转换代替品;dynamic_cast会运行时检查该转换是否类型安全,只在多态类型时合法,即该类至少具有一个虚拟方法。其中原创 2011-08-13 18:27:54 · 2110 阅读 · 0 评论 -
RTTI
自从1993年Bjarne Stroustrup 〔注1 〕提出有关C++ 的RTTI功能之建议﹐以及C++ 的例外处理(exception handling)需要RTTI﹔最近新推出的C++ 或多或少已提供RTTI。然而,若不小心使用RTTI﹐可能会导致软件弹性的降低。原创 2011-08-13 17:35:17 · 22047 阅读 · 3 评论 -
可变参数的函数说明
一、为什么要使用可变参数的函数? 一般我们编程的时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的所有实际参数。但在某些情况下希望函数的参数个数可以根据需要确定,因此c语言引入可变参数函数。这也是c功能强大的一个方面,其它某些语言,比如fortr原创 2011-08-13 17:33:19 · 691 阅读 · 0 评论 -
指针和引用的区别 .
指针在引用变量的时候需要加& 或*不够方便而定义一个引用,就相当与给变量起了个别名,在引用变量是只需要通过别名就可以直接引用对应变量指针不确定有无初始化过其变量的值引用不存在这个问题,要考虑同名的问题基本上两者一样,看你用在什么方面了其实这转载 2011-08-13 19:55:14 · 444 阅读 · 0 评论 -
C++内存管理
程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。 1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分原创 2011-08-13 17:49:58 · 729 阅读 · 0 评论 -
const总结
1.const变量,即常变量(变量值保持不变,不能被修改)a.const变量默认时是定义该变量的文件的局部变量b.非const*指针无法指向const 变量,只有const *指针能指向const 变量。c.一些const 变量定义在头文件中,const变量通过常原创 2011-08-13 17:22:02 · 751 阅读 · 0 评论 -
C++命名型的强制类型转换
命名的强制类型转换符号的一般形式如下: cast_name(expression); 其中cast_name为static_cast,dynamic_cast,const_cast和reinterpret_cast之一,type为转换的目标类型,而expression原创 2011-08-13 17:09:39 · 866 阅读 · 0 评论 -
sizeof用法总结
在VC中,sizeof有着许多的用法,而且很容易引起一些错误。下面根据sizeof后面的参数对sizeof的用法做个总结。A.参数为数据类型或者为一般变量。例如sizeof(int),sizeof(long)等等。这种情况要注意的是不同系统系统或者不同编译器得到的结果可能是不原创 2011-08-16 21:49:33 · 463 阅读 · 0 评论 -
C++多态技术的实现和反思 .
C++多态技术的实现和反思作者:杨喜敏 孟岩 出处:程序员杂志面向对象技术最早出现于1960年代的Simula 67系统,并且在1970年代保罗阿托实验室开发的Smalltalk系统中发展成熟。然而对于大部分程序员来说,C++是第一个可用的面向对象程序设计语言。因此转载 2011-08-16 21:54:52 · 561 阅读 · 0 评论 -
私有继承和聚合的分析比较
有时候程序员想利用现有的基类(即通过派生类使用现有的功能),但没有is-a关系,在这种情况下,私有继承就可以有用了。 使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员。这意味着基类方法将不会称为派生对象公有接口的一部分,但可以在派生类的成员函数中使用它们。使用私有继承,基类的公有方法将成为派生类的私有方法。简而言之,派生类不继承基类的接口。使用私有继承,类将继承实现。原创 2011-11-03 10:48:07 · 799 阅读 · 0 评论 -
虚函数的限制及多态性的有效范围
一、虚函数的限制: 大家知道,一般说来可以将类层次中的具有共性的成员函数声明为虚函数,而个性的函数只有某一个类具有,没有必要声明为虚函数,但我觉得还是有些特例情况:1、静态成员不能声明为虚函数。因为静态成员不属于某一个对象,没有多态性的特征。2、内联原创 2011-08-30 23:11:41 · 749 阅读 · 0 评论 -
C++对象内存布局测试总结
C++对象内存布局测试总结 上文是半年前对虚函数、虚拟继承的理解。可能有一些错漏。而且只是理解了比较简单的部分,表达也不够清晰,这次决定花的时间再做一次总结。 对于普通的C++对象内存布局,简单得不得了,就不做总结了。这里只总结涉及到虚拟继承的情况。原创 2011-08-28 21:32:01 · 533 阅读 · 0 评论 -
C++ 对象的内存布局
07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这也是我为什么再写一篇续言的原因。因为,在上一篇文章中,我用了的示例都是非常简单的,主要是为了说明一些机转载 2011-08-24 19:51:56 · 343 阅读 · 0 评论 -
auto_ptr深入剖析
auto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包的智能指针,这个不怎么智能的智能指针难免会黯然失色。诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”裸“指针那样非常原创 2011-08-19 23:43:15 · 455 阅读 · 0 评论 -
重载operator new与operator delete构建内存池
为什么有必要写自己的operator new和operator delete?答案通常是:为了效率。缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特定的场合下,可以进一步改善它的性能。尤其在那些需要动态分配大量的但转载 2011-08-18 16:45:07 · 775 阅读 · 0 评论 -
C++中的对象计数
在C++中,除非你要为其它事情分神,否则对某个特定类的所有已创建对象计数并不是一件很难的事。有时,简单就是简单,不过某些简单也往往很微妙。例如,假设你有一个类Widget,并且你想实现一种方法,以便在运行期获知到底有多少个Widget对象存在。一个既简单又正确的方法是,在Wi转载 2011-08-17 22:33:51 · 1298 阅读 · 0 评论 -
链接指示符extern “C”
链接指示符extern “C”extern“C”的使用方式 如果程序员希望调用其他程序设计语言(尤其是C) 写的函数,那么,调用函数时必须告诉编译器使用不同的要求。例如,当这样的函数被调用时,函数名或参数排列的顺序可能不同,无论是C++函数调用它,还是用其他语言写的函数调转载 2011-08-16 21:56:34 · 511 阅读 · 0 评论 -
不同的颜色用RGB来显示
黑色 R G B 黑色 0 0 0 象牙黑 41 36 33 灰色 R G B 泠灰 128 138 135 灰色 192 192 192 石板灰 112 128 144 暖灰色 128 128 105 白色 R G B 古董白 250原创 2011-09-03 15:45:07 · 953 阅读 · 0 评论 -
大数据量,海量数据 处理方法总结
大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到。 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数转载 2011-09-03 13:28:34 · 1196 阅读 · 0 评论 -
c++ opp 面向对象思想,受教甚多
六年前,我刚热恋“面向对象”(Object-Oriented)时,一口气记住了近十个定义。六年后,我从几十万行程序中滚爬出来准备写点心得体会时,却无法解释什么是“面向对象”,就象说不清楚什么是数学那样。软件工程中的时髦术语“面向对象分析”和“面向对象设计”,通常是针对“需求分析”转载 2011-09-02 21:19:21 · 2264 阅读 · 0 评论 -
复制构造函数
也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生。也许写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什么用,其实复制构造函数能解决一些我们常常会忽略的问题。 我们经常使用函数,传递过各原创 2011-07-21 12:17:37 · 570 阅读 · 0 评论 -
C++文件读写
C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组 fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。ifstream -- 从已有的文件读 ofstream -- 向文件写内容fstream - 打开文件供读写文件打开模式:ios::in转载 2011-07-21 12:11:52 · 9048 阅读 · 0 评论 -
atoi函数源代码
isspace(int x){ if(x==' '||x=='/t'||x=='/n'||x=='/f'||x=='/b'||x=='/r') return 1; else return 0;}isdigit(int x){ if(x='0') ret原创 2011-07-25 12:05:32 · 664 阅读 · 0 评论 -
深入讨论传值和传址
在C和C++中我们一直使用两种比较传统的形参传递方式,一种是传值一种是传址,对于他们,我们的理解是:传值调用的话,传的是内容,形参的改变不会影响实参,传址的话形参的改变会影响实参。究其原因的话:传址是形参和实参共用一个地址内存。但是,大家对到底怎么一回事还是没有很明白,我们今天就原创 2011-07-25 13:48:37 · 767 阅读 · 0 评论 -
对while语句的误解
问题:#include int main(){ int i = -1; while(i++) { cout } return 0;}问:输出结果是什么? 1. 死循环 2. hello world 一直以为while(表原创 2011-07-21 19:42:53 · 484 阅读 · 0 评论 -
浅析C++标准头文件结构
在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句转载 2011-07-21 12:00:04 · 483 阅读 · 0 评论 -
getchar、getch区别与用法 .
getchar()和getch()的问题一直困扰着大家,关于他们的区别也是众说纷纭,可没有一种说法是详细、深入的,今天我就在前人已有的成果上,试着与大家继续探讨下这个问题: 先看看规范点的说法: getchar This is a standard fu转载 2011-07-21 18:15:19 · 3386 阅读 · 0 评论 -
键码常数
键码 常数 值 描述 vbKeyLButton 1 鼠标左键 vbKeyRButton 2 鼠标右键 vbKeyCancel 3 CANCEL 键 vbKeyMButton 4 鼠标中键 vbKeyBack 8原创 2011-07-22 12:01:58 · 705 阅读 · 0 评论 -
c++ using namespace 详解
所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 一 : 和是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一转载 2011-07-21 11:55:00 · 767 阅读 · 1 评论 -
原码、反码、补码总结
原码、反码、补码 数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制转载 2011-07-21 19:46:42 · 650 阅读 · 0 评论 -
对字符串常量 的理解
常量存储总结 局部变量、静态局部变量、全局变量、全局静态变量、字符串常量以及动态申请的内存区1、局部变量存储在栈中2、全局变量、静态变量(全局和局部静态变量)存储在静态存储区3、new申请的内存是在堆中4、字符串常量也是存储在静态存储区补充说明:1、栈中的变量内存会随着定义所在区原创 2011-07-29 11:17:47 · 6675 阅读 · 3 评论 -
正则表达式
正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征转载 2011-09-03 09:48:15 · 533 阅读 · 0 评论 -
static总结
静态局部变量有以下特点:1)该变量在全局数据区分配内存; 2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化; 3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0; 4)它始终驻留在全局数据区,直到原创 2011-08-02 14:39:45 · 302 阅读 · 0 评论 -
RAII惯用法:C++资源管理的利器
RAII是指C++语言中的一个惯用法(idiom),它是“ResourceAcquisitionIs Initialization”的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理的关键转载 2011-09-01 01:11:32 · 663 阅读 · 0 评论 -
C++中的健壮指针和资源管理
C++中的健壮指针和资源管理 我最喜欢的对资源的定义是:"任何在你的程序中获得并在此后释放的东西?quot;内存是一个相当明显的资源的例子。它需要用new来获得,用delete来释放。同时也有许多其它类型的资源文件句柄、重要的片断、Windows中的GDI资源,等等。将资源原创 2011-09-01 16:47:33 · 619 阅读 · 0 评论 -
C++继承之接口继承和实现继承 .
(public) inheritance 这个表面上简单易懂的观念,一旦被近距离审视,就会被证明是由两个相互独立的部分组成的:inheritance of function interfaces(函数接口的继承)和 inheritance of function implemen转载 2011-08-02 15:59:57 · 608 阅读 · 0 评论 -
字符串处理函数源码
size_t lm_strlen(const char *str);size_t lm_strlen2(const char *str);char * lm_strcpy(char *dest, const char *src);char * lm_strncpy(c原创 2011-08-02 14:19:11 · 383 阅读 · 0 评论