C++ STL 算法另类使用方法
很多时候我们希望在一个 vector ,或者 list ,或者什么其他东西里面,找到一个值在哪个位置,这个时候 find 帮不上忙,而有人就转而求助手写循环了,而且是原始的手写循环: for ( int i = 0; i vect.size(); ++i) if ( vect[i] == value ) break; 如果编译器把 i 看作 for scope 的一部分,你还要把 i 的声明拿出去。真的需要这样么?看看这个: int dist = distance(col.begin(), find(c...
对C/C++程序中内存的分配问题的讲解
我们都知道,c/c++程序的内存分配,有这样几个存储区。 全局/静态数据区:存储全局变量,和静态变量static声明的变量 常量存储区:存储常量,如char *s="abcde"; 或者 const int i =10;代码区:这个不说了。代码放的地儿 栈:临时变量,参数等,有大小限制,vc6/7: 1M 堆: 用户自己维护的空间,内存使用需要自己申请,自己释放。大小基本不限(4G) example: #include iostream using namespace std; int global =...
C++栈和队列是操作受限的线性表
顺序表示的栈和队列,必须预先分配空间,并且空间大小受限,使用起来限制比较多。而且,由于限定存取位置,顺序表示的随机存取的优点就没有了,所以,链式结构应该是首...
C++中单例模式对象的释放控制
单例模式也称为单件模式、单子模式。使用单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出等。 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显得很不优雅。《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有静态方法获取该实例。如下面的类定义: 以下是引用片段: class CSingleton: { // 其它成员 p...
在C++中创建持久对象的方法
持久对象(persistent objects)广泛应用于游戏、分布式数据库系统、多媒体以及图形应用程序中。目前C++并不直接支持持久性(persistence)(但有一些在C++未来版本中添加持久性和反射(reflection)的建议)。持久对象可以在创建它的程序的作用域之外保持自身状态。把对象写入一个文件并在以后重建之,或者把对象传送到一台远程机器,就是这样的例子。对持久性的支持并不象第一眼看上去那样简单,同一对象的大小和内存布局在不同的平台上可能并不相同,而不同的字节次序(byte orderin...
基础入门:C++ 对象和对象的定义
我们已经知道,对象是类的实例。对象是属于某个已知的类。因此,定义对象之前,一定要先定义好该对象的类。下面简单的介绍对象的定义。 对象的定义格式 对象在确定了它的类以后,其定义格式如下: 类名对象名表 其中,类名是待定的对象所属的类的名字,即所定义的对象是该类类型的对象。对象名表中可以有一个或多个对象名,多个对象名时用逗号分隔。对象名表中,可以是一般的对象名,还可以是指向对象的指针名或引用名,也可以是对象数组名。如: tdatedate1,date2,*pdate,date[31]; 对象成员的表示方法...
基础入门:提取C++库函数的代码
提取C++库函数的代码,没有仔细测试。大家可以测试一下,修改一下。 package edu.kevin.regular; import java.io.*; import java.util.*; import java.util.regex.*; public class SrcAnalyze ...{ private String srcDir; private HashSet allAPI; private HashSet inAPI; private Pattern pt; public Src...
C++结构体内存的对齐方式
在C语言中,我们经常使用结构体(struct) 。对于结构体的描述,很多C语言的书中会提到结构体所占用的内存与其内的成员在结构体中的声明顺序有关,但是很少有书讲述了结构体占用的内存与结构体的成员声明顺序如何相关的(即结构体在内存中的对齐方式是怎么样的)。 首先我们来看以下代码的输出结果: #includestdio.h #pragma pack(2) struct T...{ char i; int d; char ii; }; #pragma pack() int main(int argc,char...
理解C++程序设计中的抽象理论
josephus问题是c++中的一个经典题目,在正式开始学习之前我们先回顾一下如何利用数组和结构体来解决josephus问题,最后我们再看一下如何利用面向对象的抽象理念进行解决此问题的程序设计,相互对比,找出效率最高,最容易理解,最方便维护的程序来,说明利用面向对象的抽象理念进行程序设计的好处。 josephus问题其实就是一个游戏,一群小孩围成一个圈,设置一个数,这个数是个小于小孩总数大于0的一个整数,从第一个小孩开始报数,当其中一个小孩报到你设置的那个数的时候离开那个圈,这样一来反复报下去,直到只剩...
谈谈C++的程序规范--变量命名
首先我不是c++的专家,甚至可以说我是新手。其次我没有看过专门讲程序规范的书,这里所谈到的主要是平时看书时随时记下的或者多年写程序的经验。我工作的地方对程序风格的要求也没有一些公司要求的那么严,所以文中肯定有很多不对的地方,希望大家指正。 说起程序规范,内容实在太多了,这里先浅谈一点变量命名规范吧。 变量的命名十分重要,如果你在一个较大的项目中写程序,或者希望自己现在写好的程序几个月后任何人拿来都能清晰的看懂,命名规范是不可缺少的。 先说的第一点就是名字本身一定要有意义,让人看了这个变量就知道他是干什么...
C++基础:C++中的虚函数的实现方法
学习 C++ 的同志不知道有没有和我一样遇到过这样的困惑:C++中的虚函数到底怎么实现的?在各种继承关系中,虚函数表的结构到底是什么样的?曾经我是很想当然,可是后来在使用ATL的过程中,我发现并不是我想的那样。大家知道,利用C++语言本身的特性进行COM编程当然是很方便的事,但是你就得随时随地都知道那虚函数表里头到底是些什么东西。讲C++语法的书没有义务告诉你C++产生的虚函数表是什么样的,这就是头痛的所在。 自已做试验是件很快乐的事,我很愿意这么做。 首先写个函数,作为我们实验的基...
C++中按值返回和返回值优化代码
C++和C语言相比,最为人诟病的就是其性能问题,通常一条C语言经编译器解释后,可以固定转换成5—10条汇编语言,但是一条C++语言,就没有这么幸运了,可能会是3条汇编语言,也可能是300条。C++影响性能的原因很多,其中一个就是临时对象的创建和销毁。这里我简述一种减少创建临时对象的方法--返回值优化问题 很多时候,函数需要按值返回,这其中就会不可避免地涉及到临时对象的创建和销毁。假设定义如下的Complex类: class Complex { friend Complex operator +(cons...