随笔分类 -  C++

Effective C++总结
摘要:条款1:View C++ as a federation of languages。视C++为一个语言联邦。分为四个部分:C、Object-Oriented C++(Class)、Template C++、STL条款2:Prefer consts, enums, inlines to #defines。尽量以const, enum, inline替代#define。记住:1.对于单纯常量,最好以const对象或enum替换#define 2.对于形似函数的宏(macros),最好改用inline函数替换#defineC语言用#define可以做到两点,第一,定义常量,如#define PI 3 阅读全文

posted @ 2012-10-30 17:04 linzuxin 阅读(187) 评论(0) 推荐(0)

自己实现memcpy/strcpy/strcmp/strcat/strlen/strstr
摘要:字节拷贝函数:void * memcpy1(void *dest, const void *src, size_t n){ assert(dest!=NULL&&src!=NULL); //有效性检测 if(dest == src) return dest; else if(dest < src) { const char *c_src = static_cast<const char *>(src); char *c_dest = static_cast<char *>(dest); while (n--) *... 阅读全文

posted @ 2012-10-23 18:10 linzuxin 阅读(270) 评论(0) 推荐(1)

C++中的空类,默认产生哪些类成员函数?
摘要:class Empty { public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造函数 ~Empty(); // 析构函数 Empty& operator=( const Empty& ); // 赋值运算符 Empty* operator&(); // 取址运算符 const Empty* operator&() const; // 取... 阅读全文

posted @ 2012-10-23 17:44 linzuxin 阅读(172) 评论(0) 推荐(0)

定义一个宏获取结构体中变量相对结构体开始的偏移量
摘要:#include <iostream> using namespace std; struct test{ int a; char b; int c; char d; }; #define find(type, var) (unsigned int)(&(((type *)(0))->var)) int main() { int a = find(test, a); //0 int b = find(test, b); //4 int c = find(test, c); //8 int d = find(test, d); //12 cout << a 阅读全文

posted @ 2012-10-22 14:26 linzuxin 阅读(218) 评论(0) 推荐(0)

C++运算符优先级
摘要:优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成员名->成员选择(指针)对象指针->成员名2-负号运算符-表达式右到左单目运算符(类型)强制类型转换(数据类型)表达式++自增运算符++变量名/变量名++单目运算符--自减运算符--变量名/变量名--单目运算符*取值运算符*指针变量单目运算符&取地址运算符&变量名单目运算符!逻辑非运算符!表达式单目运算符~按位取反运算符~表达式单目运算符sizeof长度运算符sizeof(表达式)3/除表达式/表达式左到右双目运算符*乘表 阅读全文

posted @ 2012-09-21 21:25 linzuxin 阅读(164) 评论(0) 推荐(0)

模板函数和模板类
摘要:定义3个参数,第3个参数用于表示返回值类型template <typename T1,typename T2,typename T3> inline T3 const& max (T1 const& a, T2 const& b) { // if a < b then use b else use a return a < b ? b : a; } template <class Type>class TNumber{public:~TNumber(){}void SetItem(Type);Type GetItem();privat 阅读全文

posted @ 2012-09-21 21:01 linzuxin 阅读(119) 评论(0) 推荐(0)

浅析类的const成员函数,类的const对象
摘要:1.const数据成员:跟const常量一样,只是一个在类里,一个在类外而已,都必须初始化。2.const成员函数:即普通成员函数后再加const。它可以读取数据成员的值,但不能修改它们。若要修改时,数据成员前必须加mutable。以指定其可被任意更改。mutable是ANSI C++考虑到实际编程时,可能一定要修改const对象中的某个数据成员而设的。3.普通对象:可以调用任意成员函数。4.const对象:仅能调用const成员函数。 阅读全文

posted @ 2012-09-21 20:45 linzuxin 阅读(163) 评论(0) 推荐(0)

数据结构:TRIE树
摘要:Trie树就是字符树,其核心思想就是空间换时间。举个简单的例子。给你100000个长度不超过10的单词。对于每一个单词,我们要判断他出没出现过,如果出现了,第一次出现第几个位置。这题当然可以用hash来,但是我要介绍的是trie树。在某些方面它的用途更大。比如说对于某一个单词,我要询问它的前缀是否出现过。这样hash就不好搞了,而用trie还是很简单。现在回到例子中,如果我们用最傻的方法,对于每一个单词,我们都要去查找它前面的单词中是否有它。那么这个算法的复杂度就是O(n^2)。显然对于100000的范围难以接受。现在我们换个思路想。假设我要查询的单词是abcd,那么在他前面的单词中,以b,c 阅读全文

posted @ 2012-05-04 21:32 linzuxin 阅读(174) 评论(0) 推荐(0)

c++ 虚函数的实现机制
摘要:1、c++实现多态的方法其实很多人都知道,虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?从more effecive c++其中一篇文章里面可以知道:是每个类用了一个虚表,每个类的对象用了一个虚指针。具体的用法如下:class A{public: virtual void f(); virtual void g();private: int a};class B : public A{public: void g();private: int b;};//A,B的实现省略因为A有virtual void f(),和g(),所以编译器为A类准备了一个虚表vtableA,内容如 阅读全文

posted @ 2012-04-21 19:45 linzuxin 阅读(134) 评论(0) 推荐(0)

导航