c/c++/Python/XML
文章平均质量分 51
sophistcxf
什么都略懂一点儿,生活更多彩一些
展开
-
[STL]源码分析:allocator
一、STL规定的allocator标准参见侯捷《STL源码剖析》STL规定的allocator标准包含如下功能(方法),当然,并非所有的STL实现版本都严格遵循此标准,因为allocator被STL隐藏,用户一般不直接使用allocator,故而与标准不同也不影响STL的使用。allocator::value_typeallocator::pointerallocator::con原创 2013-06-20 17:54:06 · 1498 阅读 · 0 评论 -
STL中的容器
一、从元素的组织方式上,容器被分为两类:序列式容器和关联容器。序列式容器有:vector, list, deque, stack, queue, priority-queue等。关联容器有:原创 2013-07-08 17:06:29 · 564 阅读 · 0 评论 -
[STL]源码解析:std::vector
dd原创 2013-06-20 16:33:28 · 2895 阅读 · 0 评论 -
C++中类的大小问题
本文的测试环境为VS2008。一、成员变量的对齐问题原创 2013-07-11 15:57:38 · 788 阅读 · 0 评论 -
c/c++,windows中各种字符的转换
每次碰到char, wchar, CString, BSTR等等一系列字符时,只关系到字符匹配问题,我都要重新查资料,头疼。所以在此记录碰到的关于字符,字符转换的经验。原创 2013-07-01 15:55:24 · 709 阅读 · 0 评论 -
[Effective C++] 让自已习惯C++
一、条款01——视C++为一个语言联邦起初看这个条款,觉得无甚必要,无非是将C++做了个分类,这能有什么重要的意义?可是越到后来越觉得此条款之必要。首先是更清楚的理解C++的“功能”,它能做什么以及怎么做,其次,当面临多种选择时做出最好的选择。C++有四种次语言:1. CC有什么而没有什么?C有区块,语句,预处理器,内置数据类型,数组,指针等。而没有模板,异常,重载。2. Or原创 2013-07-14 16:10:10 · 682 阅读 · 0 评论 -
[STL]源码解析:stack
我们在使用STL时,包含的头文件是,而stack中并没有实体,只是“简单”包含了,真正的东西,在这个头文件中。一、stack的三种模板#if !defined ( _STLP_LIMITED_DEFAULT_TEMPLATES )template >#elif defined ( _STLP_MINIMUM_DEFAULT_TEMPLATE_PARAMS )# define原创 2013-06-30 15:00:25 · 1360 阅读 · 0 评论 -
[STL]源码解析:deque
使用Deque时包含头文件,而此头文件只是“简单”的包含了。一、双向队列基本迭代器(_Deque_iterator_base)1. _Deque_iterator_base是有一个模板的模板类:template struct _Deque_iterator_base {}2. 定义别名 typedef random_access_iterator_tag iter原创 2013-06-30 15:40:00 · 821 阅读 · 0 评论 -
virtual
1.C++中,即使不用vitrual声明,子类也是可以重写父类的,如下:class A{public: void f() { cout << "2"; }};class B : A{public: void f() { cout << "3"; }};void main(){ A* a = (A*)new B(); a->f(); system(原创 2013-02-26 19:32:07 · 386 阅读 · 0 评论 -
[OpenGL]纹理坐标的自动生成glTexGen
以红宝书中示例程序9-8为例,探索glTexGen函数。一、函数原型:void glTexGen{ifd}(GLenum coord, GLenum pname, TYPE param);void glTexGen(ifd}v(GLenum coord, GLenum pname, const TYPE* param);参数一coord:GL_S, GL_T, GL_R, GL_Q;原创 2013-06-26 11:46:51 · 6366 阅读 · 0 评论 -
[Effective C++] 继承与面向对象设计
一、条款32——确定你的public继承塑模出is-a关系当使用public继承时,就是告诉编译器和代码读者(我认为告诉代码读者更重要,因为读者的误解,没有人会提示),这是个is-a的关系。此条款的关键在于说明了有些情况直觉上正确但是实际上是错误的。比如,直觉上,正方形Square是一种特殊的长方形Rectangle,所以Square理应继承于Rectangle。这在计算面积,周长,伸缩n原创 2013-07-14 16:35:36 · 745 阅读 · 0 评论 -
泛型
泛型模板实际上是一种多态。面向对象的多态是运行时多态(运行时才能确定类型),而泛型的多态是编译时多态(编译时就可以确定类型)。1. 在用模板时,一定要记得include ".cpp",或者将模板类成员函数的实现直接写在.h文件中,否则会找不到对于特定类型的成员函数(虽然可以过编译)。原创 2012-07-20 15:48:36 · 434 阅读 · 0 评论 -
[C++] C++的标准IO
IO库是一个面向对象库,使用stream提供了输入输出功能。什么叫stream呢?看这段叙述[1]:A stream is an abstraction that represents a device on which input and ouput operations are performed. A stream can basically be represented as a原创 2013-08-09 16:26:32 · 1015 阅读 · 0 评论 -
malloc/free和new/delete
一、相同点二、不同点1. malloc/free是C的库函数,而new/delete是C++的操作符。参考:1. http://www.pixelstech.net/article/index.php?id=1340193129原创 2013-07-16 02:41:39 · 725 阅读 · 0 评论 -
[STL]源码解析
为了更好的理解C++性质、设计模式、算法等等,决定以分析STL源码为切入点,希望可以坚持下去,自会有所收获。一、STL以STLport 5.2.1为主,下载地址:http://sourceforge.net/projects/stlport/。二、STLport的编译:http://blog.chinaunix.net/uid-20781368-id-1845167.html。此讲的比较复原创 2013-06-20 17:10:15 · 706 阅读 · 0 评论 -
[C++]把析构函数声明为virtual有什么好处?
考虑这样一个问题,有两个类,class A;class B : public A;定义了这样一个对象:A* pA = new B();这时在delete pA;时,调用的是A的析构函数,但问题是,我们定义的对象是B的对象,而要B来析构。因而就要在A中定义一个虚的析构函数,这样由于运行时多态,都会调用B中定义的析构函数。否则就要delete (B*)pA;来强制类型转换,如果A有多个原创 2012-07-13 11:45:06 · 778 阅读 · 0 评论 -
[C++]友元关系的继承性
今天看VTK源码时,碰到友元关系,在想友元关系是否可以继承。在VS2008下测试,是不能继承的。class External{ friend class Base;private: void f() { cout << "Base f" << endl; }};class Base{public: void f1() { cout << "External原创 2013-03-06 16:48:46 · 1416 阅读 · 0 评论 -
回调函数
下面是回调函数的一个例子:void f1( int a, void f(int)){ f(a+4);}void f2(int a){ cout };void f3(int a){ cout }int main(){ f1(10, f2); f1(20, f3); system( "pause" ); return 0;原创 2012-07-12 09:20:46 · 317 阅读 · 0 评论 -
父类无法见子类方法,除非声明为虚
考虑下面的例子 class A{public: void f();};class B{public: void f1(); void f2();};int main(){ A *pA = new B(); system( "pause" ); return 0;}上面代码中,本意是想用A调用B的方法f2。但是,pA原创 2012-07-12 10:24:58 · 412 阅读 · 0 评论 -
CDockablePane的测试
如何建立CDockablePane要在CMainFrame类的OnCreate中实例化CDockablePanem_pPropWnd->Create( TEXT("Properties"),this,CRect(10, 10, 200, 500),TRUE,1001,WS_VISIBLE | CBRS_FLOAT_MULTI | WS_CHILD | CBRS原创 2012-07-03 23:20:30 · 760 阅读 · 0 评论 -
面试-某公司
在*号处加一段代码,使程序可以输出“Hello World”include “stdio.h”void print(){*}void main(){}这该怎么弄呢?实际上,C/C++有许多的运行时库函数,一些运行库函数是其他代码执行的基础,必须在执行用户的代码前初始化。由于main是程序的入口函数,因而就要在main前初始化。事实上,编译器会为每个程序添转载 2012-07-12 16:08:40 · 499 阅读 · 0 评论 -
C语言操作符优先级
优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .成员选择(对象)对象.成员名转载 2012-07-13 16:05:26 · 495 阅读 · 0 评论 -
当有很多if嵌套时的处理方法
比如有个链表,当我们在遍历使用一个结点时,首先要判断这个结点是否为空,不为空了我们才能处理他的下个结点(注意对于结点的处理并不统一),如果用if嵌套大致如下:if(pNode != NULL){ process1(pNode); pNode = pNode->next; if(pNode != NULL) {原创 2012-07-13 17:16:58 · 1330 阅读 · 0 评论 -
强制类型转换
1. reinterpret_cast 操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换。只是单纯的对比特流复制,而没有进行重新的解释。是否可以利用这个将父类转换为子类。 int *a = new int; *a = 10; double* d = reinterpret_cast(a);这里是一个int类型转为了一个double原创 2012-07-16 09:23:23 · 427 阅读 · 0 评论 -
各种数据类型的转换
1. 字符串间的转换 (1)2. 数字间的转换 (1)各种类型数字的位数:int(4), short/unsigned short(2), long/unsigned long(4), long long(8)3. 字符与数字间互换 (1)int转char* : itoa (2)int转wchar_t* : _itow原创 2012-07-12 14:32:43 · 469 阅读 · 0 评论 -
文件操作
我总是搞不清楚,在文件操作是,什么是c的,什么是c++的,什么是linux的,什么是windows SDK的,什么是MFC的。现在要弄清他们。1. c fopen这个函数是在中,这个明显是c的库。File* pFile = fopen("1.txt", "r"); 然后通过fgets, fputs对这个文件句柄进行各种操作。2. c++ c++(回去翻翻原创 2012-07-26 17:04:09 · 462 阅读 · 0 评论 -
进程,多线程研究
先理解下这句话:进程和线程都是操作系统级的概念。既然是操作系统级的概念,那么与语言就没多大关系。语言只是个标准!你想啊,所谓语言,表现形式也无非就是文本文件的源代码(这有什么稀奇)(只是说源码有自己的编码规则),而关键在于编译器该怎样解读这些源码,那么编译器也就要知道这个规则。所以说,语言说白了就是给编译器的。这里我一直有个误区,总以为C运行时库就是C的东西,就是C标准。标准是什么?标准就原创 2012-07-27 14:18:21 · 451 阅读 · 0 评论 -
const的用法
1.const* char, char const *, char* const的区别 char* const p; p是常量指针,指向char。此p不能指向别的内存块。 const char* p; p指向个常量字符,此字符不能被修改。 char const * p; 同上。 这个的记法看const在谁的前面,在指针的前面说明指针是常量(指向固定的内存),在类型声明符前面说明指向原创 2013-02-26 19:25:49 · 364 阅读 · 0 评论 -
unsigned char 和 singed char 分析
void main(){ char flag = 0x80; unsigned char flag2 = 0x80; if((flag | 0xf3) == 0xf3) { cout << "OK"; } else cout << "Error"; cout << "\n"; if((flag2 | 0xf3) == 0xf3) { cout << "OK";原创 2013-03-10 21:10:59 · 980 阅读 · 0 评论 -
为什么要引入filebuf这个对象呢?
ifstream::rdbuf可以返回与此文件流相关联的filebuf对象。用这个对象可以判断打开,输入输出,可是这些事ifstream自己都可以作了,为什么要引入这个对象呢?原创 2013-03-11 15:48:44 · 3552 阅读 · 1 评论