随笔分类 - C/C++
摘要:http://www.cppblog.com/kyelin/articles/20422.html构造函数bitset<n> b;b有n位,每位都为0.参数n可以为一个表达式.如bitset<5> b0;则"b0"为"00000";bitset<n> b(unsigned long u);b有n位,并用u赋值;如果u超过n位,则顶端被截除如:bitset<5>b0(5);则"b0"为"00101";bitset<n> b(string s);b是strin
阅读全文
摘要:http://www.umich.edu/~eecs381/handouts/binary_search_std_list.pdftemplate <class ForwardIterator, class T> bool binary_search ( ForwardIterator first, ForwardIterator last, const T& value );template <class ForwardIterator, class T, class Compare> bool binary_search ( ForwardI...
阅读全文
摘要:http://www.cppblog.com/mzty/archive/2007/04/20/22349.htmlC++调用约定和名字约定调用约定:__cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,2、_cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_
阅读全文
摘要:http://www.cppblog.com/szhoftuncun/archive/2007/10/28/35356.html为了避免同一个文件被include多次1#ifndef方式2#pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #endif方式二: #pragma once ... ... // 一些声明语句 #ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包
阅读全文
摘要:std::vector的reserve和resize的区别1. reserve:分配空间,更改capacity但不改变size2. resize: 分配空间,更改capacity也改变size如果知道vector的大小,resize一下可以当数组来用,不会分配多余的内存。reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引
阅读全文
摘要:http://www.oschina.net/news/28928/9-reasons-to-start-using-c11如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用C++ 11。当然了,使用用最新的技术感觉很好,但是事实上它是否值得呢?在我看来,答案毫无疑问是肯定的。我在下面给出了9个理由,它们分为两类:性能优势和开发效率。获得性能优势理由1:move语义(move semantics)。简单的说,它是优化复制的一种方式。有时候复制很显然是浪费的。如果你从一个临时的string对象复制内容,简单的复制指针到字符缓冲区将比创建一个新的缓冲区再复制要高效得多。他之所以能工作是
阅读全文
摘要:MMS.obj : error LNK2005: XXX 已经在 httpsession.obj 中定义MMSDlg.obj : error LNK2005: XXX 已经在 httpsession.obj 中定义MMS.exe :fatal error LNK1169: 找到一个或多个多重定义的符号这是由于在.h文件中定义了全局变量,在.cpp中相当于多定义了一遍。将全局变量的定义放到 .cpp中就对了。这也是全局变量正确的定义方法。
阅读全文
摘要:原型:extern int strnicmp(char *s1,char * s2,int n); 用法:#include <string.h> 功能:比较字符串s1和s2的前n个字符但不区分大小写。 说明:strncmpi是到strnicmp的宏定义 当s1<s2时,返回值<0 当s1=s2时,返回值=0 当s1>s2时,返回值>0 举例: // strnicmp.c #include <syslib.h> #include <string.h> main() ...
阅读全文
摘要:策略(Strategy)模式,是比较简单的一种设计模式,但它的应用却随处可见。下面模拟游戏中常用的打斗场面,来理解策略模式。在游戏中,通常有n个角色,每个角色都能发出动作:fight。每个角色都使用不同的武器,并且可以更换武器。下面是此场景简化的C++实现:Strategy.h#ifndef_STRETEGY_H_#define_STRETEGY_H_//定义武器接口classWeaponBehavior{public:voidvirtualuseWeapon()=0;};classSword:publicWeaponBehavior{public:voiduseWeapon();};clas
阅读全文
摘要:1 class Singleton 2 { 3 private: 4 static Singleton* volatile instance_; 5 static ACE_Recursive_Thread_Mutex lock_; 6 protected: 7 Singleton() {} 8 pu
阅读全文
摘要:size_t strcspn ( const char * str1, const char * str2 );Get span until character in stringScansstr1for the first occurrence of any of the characters that are part ofstr2, returning the number of characters ofstr1read before this first occurrence.The search includes the terminating null-characters, s
阅读全文
摘要:1 #include <iostream> 2 #include <fstream> 3 #include <cassert> 4 5 using namespace std; 6 int main() 7 { 8 ifstream in("test.txt"); 9 assert(in.is_open());10 11 //基地址为文件结束处,偏移地址为0,于是指针定位在文件结束处12 in.seekg(0, ios::end);13 //sp为定位指针,因为它在文件结束处,所以也就是文件的大小14 streampos sp = in.
阅读全文
摘要:0 为什么需要hash_mapmap提供一个很常用的功能,实现使用了红黑树,效率很高,100万条记录,最多也只要20次的比较,就能找到你要找的记录;200万条记录事,也只要用21次的比较。has_map只需要一两次比较.虽然hash_map目前并没有纳入C++ 标准模板库中,但几乎每个版本的STL都提供了相应的实现。而且应用十分广泛。1 数据结构:hash_map原理hash_map基于hash table(哈希表)。 哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。其基本原理是:使用一个下标范围比较大的数组来存储元素。可以设计
阅读全文
摘要:alloca是在栈里分配内存另外三个是在堆里分配内存。三个函数的申明分别是:void*realloc(void*ptr,unsignednewsize);void*malloc(unsignedsize);void*calloc(size_tnumElements,size_tsizeOfElement);都在stdlib.h函数库内它们的返回值都是请求系统分配的地址,如果请求失败就返回NULLmalloc用于申请一段新的地址,参数size为需要内存空间的长度,如:char*p;p=(char*)malloc(20);通过malloc函数分配得到的内存空间是没有被初始化的calloc与mall
阅读全文
摘要:过去总以为vector和deque差不多,效率方面deque和vector接近,那干脆用效率高的vector好了。 但我忽略了另一方,一个事务存在就有它的理由,今天找到程序里面隐藏的bug给了我不得不用deque的理由,deque和vector的结构很类似,但它是多段连续空间,如果vector空间不够的时候,要重新分配空间,并把所有的数据复制到新的空间中去,deque不会这么做,它会去另外开辟一块连续空间去存放数据,所以存储效率方面deque高于vector,但deque又不同于链表,它可以说是顺序存储结构和链式存储结构的一个折中方案把,今天我写了段代码,是这样的结构vector<Ser
阅读全文
摘要:http://blog.csdn.net/starlee/article/details/945728 我们知道,在面向对象语言中,公有继承是IS-A的关系,也就是说子类是一种基类,就像说轿车是一种汽车一样。但是,有时候逻辑上正确的公有继承却会违反替换原则。面向对象设计中的替换原则是:子类必须能够替换掉它们的基类。也就是说,代码中基类出现的地方都能用子类来替换,就跟汽车能用的地方都能用轿车一样。但是,如果设计不合理,就会违反这个原则,给开发带来隐患。下面就以一个C++的例子来说明:classCShape{public:virtual~CShape(){};virtualdoubleGetAre
阅读全文
摘要:http://blog.csdn.net/starlee/article/details/1485248 ADAPTER模式可以将一个类的接口转换成另外一个接口,那样就可以使原来不兼容而不能一起工作的那些类可以一起工作。 ADAPTER模式也可以称为WRAPPER模式。 对于ADAPTER模式的简单包装功能,下面以STL中的一个例子来说明://下列代码片断摘自VC++6.0中的STACK//可以在..VC98/Include/STACK中找到template<class_Ty,class_C=deque<_Ty>>classstack{public://......va
阅读全文
摘要:http://blog.csdn.net/xushiweizh/article/details/1388982C++内存管理变革许式伟2005-7-16关键字: 内存管理 垃圾回收器 内存配置器 引用计数keyword: memory manage, memory recycler, allocator, reference count引言C/C++语言的内存管理经历了几次变革,但至今仍未能趋于成熟。这几次变革主要包括:1. 从malloc/free到new/delete。这场变革是OOP技术兴起的产物。C++是强类型语言,new/delete的主要成果也就是加强了类型观念,减少了强制类型转换
阅读全文
摘要:1 #include <iostream> 2 #include <crtdbg.h> 3 using namespace std; 4 5 #ifdef _DEBUG 6 #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) 7 #endif 8 9 void EnableMemLeakCheck()10 {11 int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );12 tmpFlag |= _CRTDBG_LEAK_CHECK_DF;13 _CrtSetDbgF...
阅读全文
摘要:两种办法:1. atoi()2. int x = 'x' - '0';
阅读全文

浙公网安备 33010602011771号