随笔分类 - C/C++
编程语言和环境搭建
摘要:这篇文章主要是推荐下http://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html这篇文章从编译器的角度看问题,比较深入。回到题目,为什么不编码返回值 是因为C中有隐式或显示的类型转换,在编译的时候无法确定调用哪一个函数。
阅读全文
摘要:需求:我们的Server服务接收Http请求,经过一系列的异步请求其它Server(对,我们的Server是一个FrontServer)后,生成最终的结果,返回给请求者。在这个过程中,需要我们的Server等待一定时间,如果结果无法得出,也需要给前端返回错误码。这是一个非常常见的需求,我们的方案很朴...
阅读全文
摘要:去除尾部多余的字符#include #include int main(int argc, const char *argv[]){ std::string str; char buf[16]; for (int i = 0; i < 10; i++) { int len...
阅读全文
摘要:这是一篇介绍bind和function用法的文章,起因是近来读陈硕的文章,提到用bind和function替代继承,于是就熟悉了下bind和function的用法,都是一些网上都有的知识,记录一下,期冀对他人也有用处。注:本文暂时不探索bind和function的实现和开销。1. bind 是什么b...
阅读全文
摘要:今天开始阅读LevelDB的代码,用source insight建立工程,但其不支持cc后缀的C++文件。找到这篇《source insight看cc文件》解决的根本办法:Options-〉“Document Options”-〉在“File filter” 里边加上*.cc或者 O...
阅读全文
摘要:比较#include #include int main(int argc, const char *argv[]){ char xman[] = "xman"; char* xtest = "xmansuper"; printf("%s\t%d\t%d\n", xman, sizeof(xm...
阅读全文
摘要:考虑如下问题假设有两个不定参数的函数void proc_one(int x, ...)void proc_two(...)假设在proc_one中需要将其不定参数部分传递给proc_two中呢?搜索了下,并没有透明的方法,只能再声明一个处理函数void proc_two (va_list ap)为了减少冗余代码,void proc_two(...)的实现为void proc_two(...){ va_list ap; va_start(ap, fmt); proc_two(ap); va_end(ap);}这也是为什么printf有vprintf版本的原因吧。
阅读全文
摘要:用程序实现ipv4地址字符串是否合法,主要考察的是C字符串的操作。搜索了下,网上没有特别好的实现,自己实现了下,见笑于大家,请指正。#include #include int valid_ip_segment(const char* begin, const char* end) { int len = end - begin; if (len 4) { return -3; // unvalid_length } int sum = 0; while (begin 255) { return...
阅读全文
摘要:bitmap是一个十分有用的结构。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。适用范围:可进行数据的快速查找,判重,删除如下是实现的代码示例,用C实现,bitmap的起始位置为0#include #include #include typedef struct bitmap { size_t capacity; char* bit_array;}bitmap_t;int bitmap_init(bitmap_t* bitmap, const size_t capacity)...
阅读全文
摘要:输入:非负整数n。输出:如输入3,则输出1~999。基本的方法涉及到大数,通过用字符串模拟加法运算。知识点:判断溢出逆序打印字符串基本的代码如下#include #include #include size_t inc_num(char* num_str, size_t len) { int i = 0; int carrier = 0; num_str[0] += 1; do { if (num_str[i] > 9) { carrier = 1; num_str[i] -= 10; } else { carrier = 0; } ...
阅读全文
摘要:按照stl的接口实现。相关源码如下,缺少异常处理的log,但不影响使用。#include #include templateclass StackQueue { public: StackQueue() {} ~StackQueue() {} void push(const T& value) { last.push(value); } const T& top() { stack_exchange(); if (first.size() > 0) { return first.top(); } // empty(); } bool emp...
阅读全文
摘要:#include typedef int object_t;size_t merge_sort(object_t* first, object_t* last, object_t* begin, object_t* end, object_t* result_first) { size_t len = last - first + (end - begin); object_t* result = result_first + len; while ((first != last) && (begin != end)) { if (*(last - 1) < *(end.
阅读全文
摘要:最近遇到一个坑,简单说来是resize与reserve的功能混淆了。如下:如果调用resize的化,编译会出错,如果给Text提供默认构造函数,则可以编译通过,最终输出的结果为10.如果调用reserve,无编译错误,输出为0。#include using namespace std;const int max_size = 10;struct Text { Text(const int size): m_size(size){ }; int m_size;};int main() { vector array; // array.resize(max_size); array.r...
阅读全文
摘要:具体参考 《C++之 new 》http://www.cnblogs.com/yzy6806555/archive/2013/02/24/2924571.html 在 C++ 中new有两种身份,一种是关键字,身份与sizeof等同,内置的;另外一种是函数。1. new作为关键字是最常见的用法。Class* ptr = new Class("rui");这句话会完成两个功能:a)调用operator new为类分配空间b)调用Class的对应的构造函数(例子中有参数)。在第二个过程中,如果发生异常(如读取丢失文件),那么可能会发生内存泄露。所以Symbian中有两段构造的解
阅读全文
摘要:非原创,不喜无看。只在堆上生成对象的基本想法是将类的析构函数置为private ,考虑下protected是否也可行。View Code class OnlyHeapClass { public: OnlyHeapClass(int i):i(i) { } void Destroy() { delete this; // 等效于"OnlyHeapClass::~OnlyHeapClass();", 写 // 成"OnlyHeapClass::~OnlyHeapClass();"更容易理 ...
阅读全文
摘要:最长公共子序列,英文缩写为LCS(LongestCommonSubsequence)。定义:一个序列S,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则S称为已知序列的最长公共子序列。两个字符串的最长子序列并不要求字符串连续,只要求有序,即统计两个字符串有多少个重复的字符。用动态规划的思路做。设C[i][j]记录以X[i]为结尾的字符串与Y[j]为结尾的字符串的LCS的长度,分两组情况考虑:1)X[i]==Y[j],则C[i][j]的结果可以根据C的定义通过C[i-1][j-1],得到2)X[i]/=Y[j],则转化为C[i][j-1]和C[i-1][j]的结果,具体公
阅读全文
摘要:问题描述:将给定的字符串,按照规格压缩,Inplace压缩字符串压缩规格为:相同字符连续,则压缩为“字符+数字个数”,如”aaaa”压缩为”a4第一个想法是如果都为非重复字符的话,如abc,则编码后岂不是要a1b1c1,占用空间是之前的2倍,达不到压缩的目的,所以应该默认为1的不输出,按照这个思路,在原字符串上进行替换。第二个想法是如果字符超过10个,即count对于的字符数字大于1个,又该如何,原博文并未处理。细想起来,这里隐含这itoa的转换,但itoa转换的字符序为倒序,需要reverse一下。如下是最终的实现版本。 size_t InplaceCompress(char* str) .
阅读全文
摘要:今天参考json-c的源码读到一个关于attribute 扩展static void json_object_init(void) __attribute__ ((constructor));static void json_object_fini(void) __attribute__ ((destructor));google到含义如下void main_enter() __attribute__((constructor));//main_enter函数在进入main函数前调用void main_exit() __attribute__((destructor));//main_exit
阅读全文
摘要:借鉴ucos消息队列中的实现,对内存池只提供信息的管理头部,由用户管理内存的分配与释放。借用了STL中的管理思路typedef union object_t{ union object_t *next; //下一个对象 char data[1];}object_t;注意其为union类型,next和data复用typedef struct ares_block{ size_t object_size; //单个对象的大小 size_t block_size; //占用的空间总数 size_t count; ...
阅读全文
摘要:相对于《简单多线程拷贝单文件v2》中,将文件下载的任务分块也作为线程,可以动态添加文件块任务。即是生产者与消费者模型。用了本Blog的《消息队列的实现》中的实现。用了《struct 初始化》中提到的参考代码方式。作为基类的msg_block_t。typedef struct ares_msg_block{ pthread_t pid; enum msg_object_type msg_type; void *data;///<*用于扩展的私有数据指针}msg_block_t;继承的msg_block_t的msg_thread_block_ttypedef s...
阅读全文

浙公网安备 33010602011771号