
C/C++
lxgwm2008
软件工程师 Engineer
展开
-
C\C++代码优化的27个建议
1. 记住阿姆达尔定律:funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数。所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。2. 代转载 2014-05-23 08:36:05 · 781 阅读 · 0 评论 -
c++之shared_ptr
Collecting Shared ObjectsBy Herb Sutter and Jim Hyslop, August 01, 20041 Commentshared_ptr is becoming widely available and added to the Standard Library.Herb Sutter (http://www.转载 2013-02-19 16:25:53 · 1498 阅读 · 0 评论 -
C++之函数指针
[33.1] Is the type of "pointer-to-member-function" different from "pointer-to-function"?Yep.Consider the following function:int f(char a, float b);The type of this function is different dep转载 2013-02-18 20:28:48 · 1199 阅读 · 0 评论 -
动态规划基本问题
一、连续子数组最大和问题#include #include using namespace std;int MaxSumArray(const int *arr, const unsigned int len, unsigned int *start, unsigned int *end){ assert(NULL != arr && len > 0 && NULL != sta转载 2013-01-21 16:24:42 · 755 阅读 · 0 评论 -
关于左值与右值(lvalue & rvalue)
Lvalues and RvaluesDan SaksJUNE 1, 2001inShare1C and C++ enforce subtle differences on the expressions to the left and right of the assignment operator转载 2013-02-21 11:20:24 · 2155 阅读 · 0 评论 -
PIMPL IDIOM简介
一 简介今天阅读《C++ API设计》一书,设计到了PIMPL IDIOM,于是研究了一下。PIMPL IDIOM是由JeffSumner首次提出的概念,意为“pointertoimplementation”,即指向实现的指针。这是一种用来隐藏源代码头文件实现细节的方法,可以保持API接口与实现的高度分离。严格来说PIMPL并不是一种设计模式,而只是一个术语,可以当作桥接模式的一个特例原创 2013-10-29 17:52:39 · 4815 阅读 · 0 评论 -
memcpy源码
一直以来知道memcpy函数有问题,没有处理内存重叠的情况;而memmove函数对这种情况进行了处理。今天碰巧有同事问到,特地翻了一下源码,了解一下实现方法,大体如下:void *memcpy(void *dst, const void *src, size_t len){ if(NULL == dst || NULL == src){ return NULL; } voi原创 2013-09-23 22:05:32 · 24662 阅读 · 9 评论 -
状态机统计单词个数
使用状态机解决问题,主要有两个步骤:1、确定系统总共有几个状态2、确定状态之间的迁移过程对于统计字符串来说,总共有四种状态:初始状态、单词状态、空格状态、结束状态四种状态之间的迁移如下:初始状态:如果输入是字符,那么进入单词状态,同时单词个数加一;如果是空格,则进入空格状态单词状态:如果输入是字符,那么什么也不做;如果是空格,则进入空格状态空格状态:如果输入是字原创 2013-06-27 17:59:06 · 1522 阅读 · 0 评论 -
链表常见面试题
一、头文件#ifndef LISTUTILS_H#define LISTUTILS_Htypedef int ElemType;typedef struct _node{ ElemType data; struct _node *next;} Node;/*Description: get the intersection point of two list原创 2013-05-09 22:19:51 · 844 阅读 · 0 评论 -
桶式排序
桶式排序是一种常见的排序方法,其定义如下:如果我们有N个整数,范围从1到M(或从0到M-1),我们可以利用这个信息得到一种快速的排序,叫做桶式排序(bucket sort)。我们留置一个数组,称之为Count,大小为M,并初始化为零。于是,Count有M个单元(或桶),开始时他们都是空的。当数组元素A[i]被读入时Count[A[i]]增1。在所有的输入被读进以后,扫描数组Count,打印输出原创 2013-03-29 13:22:16 · 1095 阅读 · 0 评论 -
Managed, Unmanaged,Native
Managed, Unmanaged,Native: What Kind of Code Is This?With the release ofVisual Studio .NET 2003 (formerly known as Everett) on April 24th,many developers are now willing to consider using the new te转载 2013-03-01 13:55:23 · 841 阅读 · 0 评论 -
C++之dynamic_cast
在C++中,dynamic_cast主要用于在继承体系中进行“下行转换”, 即将父类的引用或指针转换为子类的引用或指针。根据其参数的不同,其结果有两种。一、对指针进行转换。如果转换失败,其返回NULL。T1 obj;T2* pObj = dynamic_cast(&obj);//转换为T2指针,失败返回NULL二、对引用进行转换。如果转换失败,则抛出bad_cast异常原创 2013-02-25 11:24:15 · 538 阅读 · 0 评论 -
字符编码格式
1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个由多个二进制位组成的串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出2^8=256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。 上个世纪60年代,美国原创 2012-09-13 09:50:20 · 1593 阅读 · 0 评论 -
VS208快捷键大全
Ctrl+E,S: 查看空白 Ctrl+E,W: 自动换行 Ctrl+G: 转到指定行Shift+Alt+箭头键: 选择矩形文本 Alt+鼠标左按钮: 选择矩形文本Ctrl+Shift+U: 全部变为大写 Ctrl+U: 全部变为小写代码快捷键Ctrl+Shift+空格键 / Ctrl+K,P: 参数信息Ctrl+K,I: 快速信息Ctrl+E,U / Ctrl+K转载 2012-09-04 21:16:20 · 619 阅读 · 0 评论 -
C语言的位域
在C语言的结构体中,可以使用一个字节的某几位来定义一个成员,成为位域,如struct A{ int a:4; int b:5; int c:7;};表示该结构体有三个成员,成员a占一个字节的4位,成员b占5位,成员c占7位。关于位域在内存中的存储,有如下几个特性:1) 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字原创 2012-07-24 19:59:44 · 815 阅读 · 0 评论 -
C语言的定制初始化(designated initializer)
1、可以用枚举成员来对数组进行初始化enum{ member_one = 5, member_two};const char *nm[] = { [member_two] = "Member Two", [member_one] = "Member One",};2、结构体可以对指定成员进行初始化typedef struct { char N原创 2012-08-05 17:14:35 · 1438 阅读 · 0 评论 -
C语言深度解析笔记2:操作符
一、C语言运算符优先级PrecedenceOperatorDescriptionAssociativity1::Scope resolutionLeft-to-right2++ --Suffix/postfix increment and decrement()Function call[原创 2012-07-20 21:13:26 · 677 阅读 · 0 评论 -
C语言深度解析笔记3:预处理
一、预处理指令#define宏定义#undef取消宏定义#include文件包含#if条件编译#else#elif#endif#ifdef#ifndef#error提示错误信息,并终止编译#pragma编译器指令原创 2012-07-20 21:56:53 · 808 阅读 · 0 评论 -
GCC attribute mechanism
refer to GCC manual:1.Function attributes:6.302.Variable attributes:6.363.Type attributes:6.37原创 2012-11-09 13:33:46 · 648 阅读 · 0 评论 -
bmp文件源码
#include #include #include #ifndef WIN32#define BI_RGB 0L#pragma pack(1)typedef struct tagBITMAPINFOHEADER{ unsigned long biSize; long biWidth; long biHeight原创 2012-11-10 21:20:26 · 812 阅读 · 0 评论 -
linux下一个内存池实现
memory_pool.h#ifndef _MEMORY_POOL_H_#define _MEMORY_POOL_H_#ifdef __cplusplus namespace mem_pool { extern "C" {#endif/*Pool's mininum capacity*/#define MP_MIN_CAPACITY 5/*Pool's defa原创 2013-01-02 14:08:42 · 907 阅读 · 0 评论 -
STL algorithm之copy
定义:template OutputIterator copy ( InputIterator first, InputIterator last, OutputIterator result );作用:将[first, last)范围的元素,拷贝到以result开始的范围内。类似于:template OutputIterator copy ( InputIterator fir原创 2012-12-30 19:54:00 · 1613 阅读 · 0 评论 -
STL algorithm之binary_search
定义:template bool binary_search ( ForwardIterator first, ForwardIterator last, const T& value );template bool binary_search ( ForwardIterator first, ForwardIterator last, const T& value, Compare原创 2012-12-30 19:34:41 · 686 阅读 · 0 评论 -
再谈C/C++中的extern “C”
众所周知, C语言头文件中的extern “C”的作用是为了让C++编译器能够调用C编译器产生的二进制代码。由于C++支持函数重载等原因,C++和C编译器产生二进制代码中的函数名字是不一样的。不过,如果直接使用C++编译器来编译带有extern “C”的源代码,生成的代码能直接为C代码使用吗? 经测试,答案是:可以。 测试代码如下:test.h#ifndef _原创 2012-12-28 10:51:02 · 614 阅读 · 0 评论 -
JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language,Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C转载 2012-12-12 21:41:35 · 669 阅读 · 0 评论 -
C语言深度解析笔记1:关键字
一、关键字。C语言总共有32个关键字C语言关键字autointdoublelongcharfloatshortsignedunsignedstructunionenumstaticswitchcasedefaultbreakregisterconstvolatil原创 2012-07-19 21:12:14 · 875 阅读 · 0 评论