C++
Aegeaner
这个作者很懒,什么都没留下…
展开
-
C++0x初体验
花了几天时间,终于把Bjarne Stroustrup写的《C++0x FAQ》(还不完整)看完了,对各方面的特性有了个初步的了解。下载了最新的实验版本的gcc 4.7,实验了几个小程序,有的特性gcc目前也没有支持,看来c++11也只是一个标志性的起点,要打造一个全面支持标原创 2011-09-24 00:57:25 · 1587 阅读 · 0 评论 -
C++仿函数
根据SGI官方文档,仿函数也叫函数对象(Function Object, or Functor),定义就是任何可以像函数一样被调用的对象。一个普通的函数是函数对象,一个函数指针当然也是,广义上说任何定义了operator()的类对象都可以看作是函数对象。最基本的函数对象概念包括Generator, Unary Function(一元函数), 和Binary Function(二元函数),分原创 2012-04-20 19:34:49 · 7380 阅读 · 1 评论 -
回转顺序打印矩阵的改进算法
原题目见:http://blog.csdn.net/aegeaner/article/details/6744011如果使用二维数组,空间复杂度为O(N^2),事实上本题可以计算A[i][j]的通项公式,这样可以不用额外的矩阵存储空间,空间复杂度降为O(1)。思想是考虑从左上角开始的i*i子矩阵,只要在子矩阵扩张的外围补充(i*i+1)~(i+1)*(i+1)的序列即可。又可以看做是(i+原创 2012-04-26 18:20:58 · 1431 阅读 · 0 评论 -
Redis源代码分析之七:事件驱动库分析——Ae
aeEventLoop是一个记录记录程序事件状态的结构:/* State of an event based program */typedef struct aeEventLoop { int maxfd; long long timeEventNextId; aeFileEvent events[AE_SETSIZE]; /* Registered events */原创 2012-02-27 15:12:49 · 5280 阅读 · 1 评论 -
Redis源代码分析之六:Redis执行流程
现在我们分析Redis从启动开始的执行流程,从而顺藤摸瓜地理解其事件驱动模型。首先找到main入口:int main(int argc, char **argv) { time_t start; initServerConfig(); if (argc == 2) { if (strcmp(argv[1], "-v") == 0 ||原创 2012-02-27 14:09:40 · 8652 阅读 · 0 评论 -
Redis源代码分析之五:简单动态字符串——Sds
一个Redis字符串的结构体定义是:struct sdshdr { int len; int free; char buf[];};其中buf字符数组中储存实际的字符串。len变量保存字符串的长度。free变量指出还有多少字节可用。sds被定义为一种新的数据类型,实际就是字符指针:typedef char *sds;例如,sdsnewlen原创 2012-02-04 15:40:27 · 2338 阅读 · 0 评论 -
Redis源代码分析之四:Unix底层网络通信——Anet
还是先介绍接口:int anetTcpConnect(char *err, char *addr, int port);int anetTcpNonBlockConnect(char *err, char *addr, int port);int anetUnixConnect(char *err, char *path);int anetUnixNonBlockConnect(ch原创 2012-02-04 14:29:33 · 4401 阅读 · 1 评论 -
Redis源代码分析之三:散列表——Dict(下)
下面分析散列表常见操作,如插入、删除、替换等。散列表插入函数dictAdd实现如下:/* Add an element to the target hash table */int dictAdd(dict *d, void *key, void *val){ int index; dictEntry *entry; dictht *ht; if原创 2012-02-04 11:48:44 · 3069 阅读 · 0 评论 -
Redis源代码分析之一:内存管理——Zmalloc
首先Zmalloc的接口定义在头文件Zmalloc.h里:void *zmalloc(size_t size);void *zcalloc(size_t size);void *zrealloc(void *ptr, size_t size);void zfree(void *ptr);char *zstrdup(const char *s);size_t zmalloc_use原创 2012-02-01 19:05:05 · 8613 阅读 · 1 评论 -
Redis源代码分析之二:散列表——Dict(上)
先介绍Redis散列表实现的几个重要数据结构:字典项DictEntry:typedef struct dictEntry { void *key; void *val; struct dictEntry *next;} dictEntry;字典类型DictType:typedef struct dictType { unsigned原创 2012-02-01 20:16:48 · 3954 阅读 · 0 评论 -
Notepad++中编译C/C++程序的方法
运行菜单->运行->输入命令:cmd /k cd $(CURRENT_DIRECTORY) & g++ -o $(NAME_PART).exe $(FULL_CURRENT_PATH) & $(NAME_PART).exe & PAUSE & EXIT保存为C-Com原创 2011-10-14 18:20:49 · 4484 阅读 · 1 评论 -
最简C++11笔记
最简C++11笔记Move语义避免复制开销,转移指针的所有权。右值引用右值引用通过A&&创建,实现move语义和理想的参数传递。变长模板可以传入0到多个模板参数:template <typename... T>struct arity {constexpr static int value = sizeof...(T);};stati...原创 2018-03-13 23:28:48 · 410 阅读 · 0 评论