江南烟雨

江南好,风景旧曾谙。日出江花红胜火,春来江水绿如蓝。能不忆江南? !

【C++】由指针常量和常量指针引发的问题

今天在写一个C++程序的时候,要用到STL的set容器,而且我想让它利用自定义的排序准则来实现自动排序。而且set中元素类型是指向自定义的结构体的指针。结果运行总是出错。 下面先贴出起初的代码: #include #include using namespace std; typede...

2013-07-18 21:30:20

阅读数:3424

评论数:1

【C++学习】C++中的强制转换

C++中的强制转换 1、旧风格的强制换转换 C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的语法: T(exdivssion) /...

2013-06-28 21:16:43

阅读数:2286

评论数:0

【STL深入学习】SGI STL空间配置器详解(二)-第二级空间配置器

本文讲解SGI STL空间配置器的第二级配置器。 相比第一级配置器,第二级配置器多了一些机制,避免小额区块造成内存的碎片。不仅仅是碎片的问题,配置时的额外负担也是一个大问题。因为区块越小,额外负担所占的比例就越大。 额外负担是指动态分配内存块的时候,位于其头部的额外信息,包括记录内存块大小的信...

2013-04-17 11:10:50

阅读数:3130

评论数:1

【C++】new A和new A()的区别详解

我们在C++程序中经常看到两种new的使用方式:new A以及new A()。那么这两种究竟有什么区别呢? 调用new分配的内存有时候会被初始化,而有时候不会,这依赖于A的类型是否是POD(Plain old data)类型,或者它是否是包含POD成员、使用编译器生成默认构造函数的类。 ...

2013-04-13 11:24:19

阅读数:6883

评论数:1

【C++面向对象】类的静态成员函数(static member functions)

一、静态成员函数的引入 在引入静态成员函数之前,C++语言要求所有的成员函数都必须经由该类的对象来调用。而实际上,只有当成员函数中有存取非静态数据成员时才需要类对象。类对象提供this指针给这种函数使用。这个this指针把“在成员函数中存取的非静态数据成员”绑定于“对象内对应的成员”身上...

2013-04-10 15:13:03

阅读数:2468

评论数:1

【STL学习】自己动手C++编程实现hash table(散列表)

SGI STL中散列表采用链接法解决冲突。结构中维护了一个vector,vector中每一个元素称为一个桶(bucket),它包含的是一个链表的第一个节点。 下面代码展示了自己编程实现的hash table,C++模板类封装。 如有错误,还请包涵和指正(E-Mail:xiaju...

2013-04-01 15:52:03

阅读数:4650

评论数:1

【STL学习】优先级队列Priority Queue详解与C++编程实现

优先级队列Priority Queue介绍 优先级队列是一个拥有权值观念的queue。它允许在底端添加元素、在顶端去除元素、删除元素。 优先级队列内部的元素并不是按照添加的顺序排列,而是自动依照元素的权值排列。权值最高者排在最前面。 缺省情况下,优先级队列利用一个大顶堆完成。关于堆可...

2013-01-30 16:43:11

阅读数:14446

评论数:0

【STL学习】堆相关算法详解与C++编程实现(Heap)

堆简介 堆并不是STL的组件,但是经常充当着底层实现结构。比如优先级队列(Priority Queue)等等。 堆是一种完全二叉树,因此我们可以用数组来存储所有节点。在这里的实现中,采用了一个技巧:将数组中索引为0的元素保留,设置为极大值或者为极小值(依据大顶堆或者小顶堆而定)。那么当...

2013-01-29 19:33:56

阅读数:17127

评论数:0

【STL深入学习】SGI STL空间配置器详解(一)-第一级空间配置器

一、SGI STL配置器简介 SGI STL的配置器与众不同,它与标准规范不同。如果要在程序中明确使用SGI配置器,那么应该这样写: vector iv;他的名字是alloc,而且不接受任何参数。标准配置器的名字是allocator,而且可以接受参数。 SGI STL的每一个...

2012-12-02 16:17:20

阅读数:5110

评论数:3

【C++】错误处理和异常处理

C++语言本身或标准程序库所抛出的所有异常,都派生自基类exception。这是其他数个标准异常类别的基类,它们共同构成一个类体系: 图一 标准异常阶层体系 这些标准异常类别分为三组: (1)语言本身所支持的异常 此类异常用以支撑某些语言特性。主要包括:...

2012-11-27 18:21:46

阅读数:13124

评论数:0

【C++ STL学习之八】逆向迭代器reverse_iterator

对于逆向迭代器,很重要的一点是需要弄清楚逻辑位置和实际位置二者的区别。 下图显示了逆向迭代器的位置和所指的数值: 可以发现,逆向迭代器所指位置(实际位置)和所代表的的数值(逻辑位置或数值)是不同的。C++这么做是有其原因的。导致这个行为的原因是区间的半开性。为了能够制定容器...

2012-11-09 10:19:58

阅读数:2137

评论数:0

【C++深入探索】Copy-and-swap idiom详解和实现安全自我赋值

任何管理某资源的类比如智能指针需要遵循一个规则(The Rule of Three): 如果你需要显式地声明一下三者中的一个:析构函数、拷贝构造函数或者是拷贝赋值操作符,那么你需要显式的声明所有这三者。 拷贝构造函数和析构函数实现起来比较容易,但是拷贝赋值操作符要复杂许多。 它是怎么实现的?...

2012-08-30 21:40:30

阅读数:5690

评论数:2

【C++】类的成员初始化表与构造函数内赋值操作

我们常常在初始化类数据成员的时候,对使用初始化表和在构造函数中十分困惑,这二者有什么区别呢?我们应该如何选择呢? 先举个简单的例子,看下面的两段代码: 代码A: inline Account::Account(const char* name,doubl opening_bal) ...

2012-08-17 20:16:56

阅读数:3760

评论数:3

【C/C++】异或操作巧妙实现两个数的交换操作

今天在看OpenGL加载TGA格式图像用作纹理的代码时,看到关于RGB(A)顺序转换的一行代码时,捉一开始感到很困惑,后来想了想,就是实现交换操作。 原始代码: texture->imageData[cswap] ^= texture->imageData[cswap+2] ^...

2012-06-08 19:48:50

阅读数:3060

评论数:4

【C++面向对象】类的数据成员:绑定、布局和存取

一、数据成员的绑定(The binding of a data member) 先看一段代码: //某个头文件,从某处含入 extern float x; class Point3d { public: Point3d(float,float,float); float X() ...

2012-05-19 21:34:08

阅读数:2391

评论数:0

【C++面向对象】类的大小以及虚继承

先看下面一段代码: #include using namespace std; class X{}; class Y:public virtual X{}; class Z:public virtual X{}; class A:public Y,public Z{}; int ma...

2012-05-18 21:33:42

阅读数:2346

评论数:1

【C++ STL学习之七】STL算法之find和find_if

一、find()算法 template InputIterator find ( InputIterator first, InputIterator last, const T& value ) { for ( ;first!=last; first++) if ( *...

2012-04-23 20:49:52

阅读数:17196

评论数:0

【C++ STL学习之六】STL算法之for_each

for_each()函数将调用者提供的操作施加于每一个元素身上。它既可以是非变动性算法,也可以说是变动性算法。 template Function for_each (InputIterator first, InputIterator last, Function f); 将函数f施...

2012-04-23 20:25:47

阅读数:2724

评论数:0

【C++ STL学习之五】容器set和multiset

一、set和multiset基础 set和multiset会根据特定的排序准则,自动将元素进行排序。不同的是后者允许元素重复而前者不允许。 需要包含头文件: #include set和multiset都是定义在std空间里的类模板: template<class _K...

2012-04-14 09:35:01

阅读数:49719

评论数:6

【C++ STL学习之四】容器list深入学习

一、list基础 List使用一个双向链表来管理元素。图一显示了list的结构。 图一 list的结构 任何型别只要具备赋值和可拷贝两种性质,就可以作为list的元素。 二、list的功能 list的内部结构和vector和deque截然不同,在很多方面都表现不同: 1...

2012-04-13 20:46:53

阅读数:3836

评论数:1

提示
确定要删除当前文章?
取消 删除
关闭
关闭