
C++
文章平均质量分 60
gyafdxis
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
展开
-
result_of SFINAE
std::result_of and SFINAEISO/IEC JTC1 SC22 WG21 N3462=12-0152 - 2012-10-18Eric Niebler (eric.niebler@gmail.com)Daniel Walker (daniel.j.walker@gmail.com)Joel de Guzman (djowel@gmail.com)This转载 2015-07-30 09:52:10 · 630 阅读 · 0 评论 -
自己实现的简单heap max_heap和min_heap 还有sort
#ifndef __HEAP__#define __HEAP__#include "allocator.h"#include "__default_alloc_template.h"#include "Vector.h"templateclass heap{public: typedef typename Vector::iterator iterator;//底层用vector原创 2015-11-30 20:47:12 · 624 阅读 · 0 评论 -
自己实现的一个list双链表
#ifndef __LIST__#define __LIST__#ifndef __IOSTREAM__#include #endif#ifndef __ALLOCATOR__#include "allocator.h"#endif#ifndef __DEFAULT_ALLOC_TEMPLATE__#include "__default_alloc_templa原创 2015-11-30 20:50:53 · 432 阅读 · 0 评论 -
STL的copy真是是做的了极致的效率
inline char* unitialized_copy(const char* first, const char* last, char* result){ std::memmove(result, first, last - first); return result + (last - first); } inline wchar_t* unitialized_copy(c原创 2015-11-30 21:00:46 · 1344 阅读 · 0 评论 -
复制构造和重载()的区别
复制构造是第一次在构造对象的时候就需要直接调用复制构造,比如class A{};A a;a b(a);这里使用的就是复制构造;但是如果是这样就不对了A a;a b;b(a);注意这里就是重载()了。很细微的差别原创 2015-11-02 19:55:03 · 458 阅读 · 0 评论 -
RBT
前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度。但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(Red-Black Tree)定义红黑树的主要是像是对2-3查找树进行编码,尤其是对2-3查找树中的3-node转载 2015-11-23 20:25:22 · 463 阅读 · 0 评论 -
C++ virtual 继承
07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这也是我为什么再写一篇续言的原因。因为,在上一篇文章中,我用了的示例都是非常简单的,主要是为了说明一些机理上的问题,也是为了图一些表达上方便和简单。不想,这篇文章成为了打开C++对象模型内存布局的一个引子,引发了大家对C++转载 2015-11-22 22:03:22 · 1152 阅读 · 0 评论 -
C++virtual继承
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这转载 2015-11-22 22:00:48 · 578 阅读 · 0 评论 -
July的大学生涯
我的大学生涯作者:July,湖南人,2008年入学东华理工。时间:二零一一年七月二十三日。 半个多月前,便已离校了。往往是某些事还未来得及回顾,又将会有新的生活,新的挑战迎面扑来,令你手脚失措。但终究是为了不致忘却,也算是对过去三、四年的回顾与纪念,还是记下点什么吧,免得对以后的生活心生倦意。 三年前,即2008年10月,我是转载 2015-10-28 21:07:14 · 1047 阅读 · 0 评论 -
binary_serach_tree
这个binary_search_tree由于比较简单,就不细细解释了原创 2015-11-30 20:36:40 · 352 阅读 · 0 评论 -
Word Pattern
Word PatternGiven a pattern and a string str, find if str follows the same pattern.Here follow means a full match, such that there is a bijection between a letter in pattern and a non-em原创 2015-11-30 22:34:18 · 487 阅读 · 0 评论 -
树那里代码总结
//树的非递归三种遍历算法//先序遍历算法void PreOrder(BiTree* bt){ Stack s; init(s) p = bt; while(p&&!IsEmpty(s)) { if(p) //当p不为空的时候一直往左走并且访问 { visit(p->data); push(s,p)原创 2017-03-13 19:19:27 · 547 阅读 · 0 评论 -
图那里的算法总结
//这里整理的为图那里的算法//邻接矩阵和邻接表的图的表示很重要//这里就不说明MAXSIZE就为最大值的默认了typedef struct ArcCell{ VRType adj; //这里是点中的值 InfoType *info; //这里是有关点的信息比如这里可以放原创 2017-03-13 19:20:24 · 406 阅读 · 0 评论 -
排序算法总结
//几个排序//快排 堆排序 希尔排序 归并排序 插入排序,选择排序 //快速排序//以下所有的排序都是从小到大排序//不稳定 时间复杂度O(nlgn)空间复杂度O(1) 最坏时间复杂度O(n^2)当序列基本或者完全趋于有序void qsort(int a[].int low,int high){ int privot = partition(a,low,high);原创 2017-03-13 19:16:50 · 359 阅读 · 0 评论 -
select poll epoll的区别
本文转载至:http://www.cnblogs.com/Anker/p/3265058.htmlselect,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也转载 2016-05-23 12:52:02 · 381 阅读 · 0 评论 -
UNP小记
UNIX下的open函数和create函数都只有两个函数。open(pathname,O_WRONLY|O_CREATE,mode);create(pathname,O_WRONLY,mode);close(int filedes);关闭一个文件时也释放该进程加在该文件上的所有记录锁。当一个进程终止时,它所有的打开文件都由内核自动关闭,很多程序都使用这一功能,而不显示的使用cl原创 2016-02-24 12:04:06 · 432 阅读 · 0 评论 -
vim配置文件
“——————————————————————- ” VIM 配置 ” ” 最后修改时间:2015-08-22 “——————————————————————-” vundle 配置 set nocompatible filetype off set rtp+=~/.vim/bundle/Vundle.Vim call vundle#begin()Plugin原创 2016-03-05 15:38:58 · 625 阅读 · 1 评论 -
欢迎使用优快云-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2016-03-05 15:37:16 · 370 阅读 · 0 评论 -
gdb调试程序
gdb调试程序,其实很方便,也很简单。不过今天才学会一点gdb。g++ file.cpp -g -o file这里需要注意需要加-g编译选项.接下来直入正题,我现在用gdb调试程序。gdb> file filename这个filename是你生成的二进制文件名。gdb>r这里r表示run;然后gdb>b 12表示在12行设置断点。然后gdb>n表示运行下一行原创 2016-03-05 15:33:11 · 391 阅读 · 0 评论 -
一个位操作的小技巧
如果把一个整形 你想的二进制置1;可以这样 比如这里有个32位int t;可以这样 t |= 0x00在big endian下则是将它的第一位置1;然后如果是这样t|=0x01的话就将他的第二位置1;这里很简单了 在用字典的时候这个有很大用处原创 2015-11-05 10:45:15 · 474 阅读 · 0 评论 -
写配置文件
引:读取配置文件是很常见的,尤其在后台服务器(linux、unix上)跑程序为了扩展性,都常用配置文件作为程序的输入来完成不同的工作内容。本文提供了简单的实现方法:话不多说,看函数:[cpp] view plaincopy/* *parameter: cfgfilepath 文件的绝对路径名如: /user/home/my.cfg转载 2015-09-15 21:37:40 · 545 阅读 · 0 评论 -
shared_ptr之多线程
shared_ptr的实现看了一下stl的源码,shared_ptr的实现是这样的: shared_ptr模板类有一个__shared_count类型的成员_M_refcount来处理引用计数的问题。__shared_count也是一个模板类,它的内部有一个指向Sp_counted_base_impl类型的指针_M_pi。所有引用同一个对象的shared_ptr都共用一个_M_pi指转载 2015-09-15 18:57:43 · 1778 阅读 · 0 评论 -
libevent源码剖析
创建和销毁 event_baseevent_base 是首先需要被创建出来的对象。event_base 结构持有了一个 event 集合。如果 event_base 被设置了使用锁,那么它在多个线程中可以安全的访问。但是对 event_base 的循环(下面会马上解释什么是“对 event_base 的循环”)只能在某个线程中执行。如果你希望多个线程进行循环,那么应该做的就是为每一个线程创转载 2015-09-28 23:11:03 · 446 阅读 · 0 评论 -
一道面试题
编写一个方法,将字符串中的空格全部替换为“%20”,假设字符串有足够的空间新增字符,并且知道字符串的真实长度;输入:“Mr John Smith”输出: "Mr%20Johs%20Smith"#include#include#include#includeusing std::endl;using std::cin;using s原创 2015-09-07 12:45:48 · 333 阅读 · 0 评论 -
面试题
简述局部作用域,全局作用域和类作用域的异同一个定义于某模块中的函数的全局作用域是该模块的命名空间,而不是该函数的别名被定义或调用的位置 虽然作用域是静态定义的,在使用时作用域是动态的。在任何运行时刻,总是恰好有三个作用域在使用中(即恰好有三个名字空间是直接可访问的):最内层的作用域,最先被搜索,包含局部名字;中层的作用域,其次被搜索,包含当前模块的全局名字;最外层的作用域最后被搜转载 2015-09-06 17:12:25 · 4730 阅读 · 0 评论 -
对文件的读写;
#include #include #include #includeint main(){std::string str;std::ifstream file("test.txt", std::ios::in | std::ios::ate);if (file) {std::ifstream::streampos filesize = file原创 2015-09-06 21:28:22 · 439 阅读 · 0 评论 -
unspecified-bool-type
类boost::scoped_ptr的源码中有如下声明:operator unspecified-bool-type() const; 这是个到unspecified-bool-type类型的隐式转换函数,它可以在Boolean上下文中测试一个智能指针。如果shared_ptr保存着一个有效的指针,返回值为True;否则为false。注意,转换函数返回的类型是不确定的。把返回类型转载 2015-09-25 23:29:06 · 545 阅读 · 0 评论 -
std::理解chrono
//这个是duration的实现template class Rep, class Period = ratio1> > class " style="text-decoration:none; color:rgb(156,90,156)">duration; } template class Rep1, class Period1, class Rep2, class Perio原创 2015-09-04 16:34:50 · 633 阅读 · 0 评论 -
C++11的时间
c++11提供了日期时间相关的库chrono,通过chrono相关的库我们可以很方便的处理日期和时间。c++11还提供了字符串的宽窄转换功能,也提供了字符串和数字的相互转换的库。有了这些库提供的便利的工具类,我们能方便的处理日期和时间相关的转换和格式输出。chrono chrono库主要包含了三种类型:时间间隔Duration、时钟Clocks和时间点Time point。Durat转载 2015-09-04 10:52:05 · 482 阅读 · 0 评论 -
shared_ptr 之循环引用 weak_ptr
在std::shared_ptr被引入之前,C++标准库中实现的用于管理资源的智能指针只有std::auto_ptr一个而已。std::auto_ptr的作用非常有限,因为它存在被管理资源的所有权转移问题。这导致多个std::auto_ptr类型的局部变量不能共享同一个资源,这个问题是非常严重的哦。因为,我个人觉得,智能指针内存管理要解决的根本问题是:一个堆对象(或则资源,比如文件句柄)在被多个对转载 2015-09-15 18:14:38 · 439 阅读 · 0 评论 -
shared_ptr和intrusive_ptr的对比差别 RAW POINTER
boost::intrusive_ptr一种“侵入式”的引用计数指针,它实际并不提供引用计数功能,而是要求被存储的对象自己实现引用计数功能,并提供intrusive_ptr_add_ref和intrusive_ptr_release函数接口供boost::intrusive_ptr调用。下面通过一个具体的例子来说明boost::intrusive_ptr的用法,首先实现一个基类intrusiv转载 2015-09-15 18:43:34 · 835 阅读 · 0 评论 -
Read && Write
std::fstream Read("xxx.txt"); while (!Read.eof()) { std::getline(Read, curStr); std::istringstream curBuf(curStr); std::string str; curBuf >> str; curSaver.m_account = str; str.clear原创 2015-09-15 21:29:14 · 611 阅读 · 0 评论 -
stringToTime && timeToString
void timeToString(const time_t& time, std::string& str){tm tm1;localtime_s(&tm1, &time);char c_time[15];sprintf_s(c_time, "%2d-%1d-%2d", tm1.tm_year + 1900, tm1.tm_mon + 1, tm1.tm_mday);st原创 2015-09-15 21:25:14 · 1714 阅读 · 0 评论 -
C++RemoveReference
#includeusing std::cout;using std::cin;using std::endl;templatestruct RemoveReference{ typedef T type;};templatestruct RemoveReference{ typedef T type;};templatestruct RemoveReference{ t原创 2015-09-04 10:24:09 · 1662 阅读 · 0 评论 -
之前介绍 thread join和detach的区别但是不详细 (详细介绍)
线程状态:在一个线程的生存期内,可以在多种状态之间转换,不同的操作系统可以实现不同的线程模型,定义许多不同的线程状态,每个状态还可以包含多个子状态,但大体来说,如下几种状态是通用的:1)就绪:参与调度,等待被执行,一旦被调度选中,立即开始执行2)运行:占用CPU,正在运行中3)休眠:暂不参与调度,等待特定事件发生4)中止:已经运行完毕,等待回收线程资源原创 2015-11-03 19:40:52 · 5122 阅读 · 0 评论 -
STL memory pool的详细解析下
首先需要把你的需要取得内存块转换成8的倍数这样转换 (m+ 8 - 1)&~(8-1)这样的话就可以转化了,然后直接找打自由链表的节点需要这个函数freelist_index这个函数可以计算你的第几个自由链表;然后直接找到自由链表中的现在可以使用的头结点的地址这里用my_free_list = freelist + index;然后找到之后就开始分配了,看看你的自由联是不是还有可以分配原创 2015-11-03 21:48:05 · 860 阅读 · 0 评论 -
lock_guard和unique_lock的区别
C++11中有一个区域锁lock_guard,还有第二个区域锁unique_lock。 区域锁lock_guard使用起来比较简单,除了构造函数外没有其他member function,在整个区域都有效。 区域锁unique_guard除了lock_guard的功能外,提供了更多的member_function,相对来说更灵活一些。 unique_guar转载 2015-11-03 19:39:00 · 3300 阅读 · 0 评论 -
thread的join和detach
thread的join其实就是区分就是会不会和主线程回合;其实也就是能不能释放资源的意思;join这个需要和主线程回合等到主线程快结束的时候然后释放该子线程的资源;detach这是是不需要和主线程回合的这个只要子线程执行完了之后 直接释放子线资源原创 2015-11-03 19:35:59 · 557 阅读 · 0 评论 -
STL memory pool的详细解析上
其实我感觉SGI STL的memory pool其实比较简单的,我记着大一的时候看的时候感觉挺复杂的,但是现在看不难,而且我对SGI STL的memory pool感觉十分厉害;我分析了一下这个内存池可能有内存碎片估计就这个几个地方;估计是memory pool中最后小于8字节的内存碎片 还有就是在freelist中的小于8字节的内存碎片,很简单freelist可以很大的改善,可以把1原创 2015-11-03 20:02:05 · 1649 阅读 · 0 评论 -
hash
转自:http://blog.youkuaiyun.com/zxycode007/article/details/6999984散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙。散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据转载 2017-10-07 10:29:31 · 914 阅读 · 0 评论