
C++
文章平均质量分 62
aa838260772
这个作者很懒,什么都没留下…
展开
-
C++ 虚函数表解析
C++ 虚函数表解析陈皓http://blog.youkuaiyun.com/haoel前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函转载 2014-05-21 16:31:13 · 444 阅读 · 0 评论 -
构造xls表格
#include #include using namespace std;int main(int argc, char **argv){ ofstream inf; string filename = string(argv[1]) + ".xls"; inf.open( filename.c_str(), ofstream::out | ofstream:原创 2014-12-24 11:11:31 · 430 阅读 · 0 评论 -
c++运算符重载以及一些基本概念
c++primer第四版4351.赋值( = ), 下标( [ ] ) ,调用 ( ( ) ), 成员访问箭头 (->)等操作符必须定义为成员,定义为非成员时,编译器报错2. 像赋值一样,符合赋值操作符通常应定义为类的成员,但是定义为非成员的复合赋值操作符时不会出现编译错误3.改变对象状态或给定类型紧密联系的其他一些操作符,如自增,自减和解引用,通常应定义为类的成员4.对称操作原创 2014-10-03 14:58:30 · 923 阅读 · 0 评论 -
exception类的实现
1) 函数后面声明 throw() 只是接口的提供者和接口的使用者间的默契或称协议。2) 这种协议不影响正常的异常处理流程。原创 2014-10-04 00:42:44 · 878 阅读 · 0 评论 -
简单的单例类和智能指针
1.一个简单的单例类:class Singleton{ public: static Singleton *getInstance() { if(pInstance_ == NULL){ mutex_.lock(); if(pInstance_ == NULL){原创 2014-09-27 12:49:13 · 1190 阅读 · 0 评论 -
重载new delete操作符打印堆上内存分配信息
重载new操作符,打印new分配堆上的内存时的地址,文件,所在行数,以便监测内存泄露#include #include #include #include #define DEBUGusing namespace std;#ifdef DEBUGvoid *operator new(size_t size, const char *file, int line){原创 2014-09-30 22:47:47 · 774 阅读 · 0 评论 -
STL中容器的底层实现原理
在STL中基本容器有: vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少map:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了底层采用的是树型结构,多数使用平衡二叉树实现,查找某一值是常数时间,遍历起来效果也转载 2014-09-30 11:05:23 · 7017 阅读 · 0 评论 -
vector和map的迭代器失效问题
1.vector#include #include #include using namespace std;void vectorTest(){ vector container; for (int i = 0; i < 10; i++) { container.push_back(i); } vector::iterato原创 2014-09-29 23:23:43 · 2608 阅读 · 0 评论 -
C++中stack的deque实现
本文实现了STL中stack的大部分功能,同时添加了一些功能。注意以下几点:1.Stack是一种适配器,底层以vector、list、deque等实现2.Stack不含有迭代器在本例中,我添加了几项功能,包括不同类型stack之间的复制和赋值功能,可以实现诸如Stack >和Stack >之间的复制和赋值,这主要依靠成员函数模板来实现。为了更方便的实现以上功能,转载 2014-10-05 00:43:57 · 1371 阅读 · 0 评论 -
C++中vector的实现
注意几点:分配内存不要使用new和delete,因为new的同时就把对象构造了,而我们需要的是原始内存。所以应该使用标准库提供的allocator类来实现内存的控制。当然也可以重载operator new操作符,因为二者都是使用malloc作为底层实现,所以直接采用malloc也可以。对象的复制必须使用系统提供的uninitialized_fill和uninitialized_转载 2014-10-02 16:20:03 · 1716 阅读 · 0 评论 -
C++中priority_queue的实现
优先级队列相对于普通队列,提供了插队功能,每次最先出队的不是最先入队的元素,而是优先级最高的元素。它的实现采用了标准库提供的heap算法。该系列算法一共提供了四个函数。使用方式如下:首先,建立一个容器,放入元素:vectorint> coll;insertNums(coll, 3, 7);insertNums(coll, 5, 9);insertNums(coll, 1, 4转载 2014-10-05 22:04:42 · 1489 阅读 · 0 评论 -
c++中queue的实现
本文实现了STL中stack的大部分功能,同时添加了一些功能。注意以下几点:1.Stack是一种适配器,底层以vector、list、deque等实现2.Stack不含有迭代器在本例中,我添加了几项功能,包括不同类型stack之间的复制和赋值功能,可以实现诸如Stack >和Stack >之间的复制和赋值,这主要依靠成员函数模板来实现。为了更方便的实现以上功能,我添加了转载 2014-10-05 20:28:17 · 2323 阅读 · 0 评论 -
C++11的function bind回调机制
#include using namespace std::placeholders;1.可以提前声明函数类型:function 函数名; function fn 也可以不用声明类型直接bind前面:auto fn = bind( ....) 函数参数的对应: 以实际函数的参数对应声明的位置原创 2014-10-06 14:04:07 · 4435 阅读 · 1 评论 -
C++中priority_queue的比较函数重载的两种方式
1.定义比较函数,以函数对象形式 这种方式使用时,需要把函数加入priority_queue的声明中去 struct com{ bool operator()( T &t1, T &t2) { }};priority_queue, com> que;2.在结构体中重载class T{public:friend bool o原创 2014-10-03 14:30:46 · 5944 阅读 · 0 评论 -
string类的实现
mystring.h#ifndef _MYSTRING_H_#define _MYSTRING_H_#include #include class mystring{ friend std::ostream &operator<<(std::ostream &os, const mystring &); friend std::istream &operator>原创 2014-09-05 22:53:15 · 654 阅读 · 0 评论 -
tinyxml的使用以及示例
1.下载xml源代码:github上面 clone地址:https://github.com/aughey/tinyxml/2.下来以后自己make一下主要的就几个头文件和源文件3.测试案例4.编译成静态库: ar rv libxml.a *.o5. 测试案例运行: g++ -o test test.o -L./ -lxml6.问题:对于main程序,先编译成目标文件,最原创 2014-12-29 20:40:58 · 699 阅读 · 0 评论