![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 68
afei198409
这个作者很懒,什么都没留下…
展开
-
c++函数模板
资料摘自《C++ Primer Plus》模板定义#include templatevoid Swap(T &a, T &b) {T temp = a;a = b;b = temp;}int main() {using namespace std;int i = 10;int j = 20;Swap(i, j);cout double x原创 2015-12-21 18:54:33 · 416 阅读 · 0 评论 -
<Effective C++>读书笔记-4
资料摘自条款26:尽可能延后变量定义式的出现时间只要定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序的控制流到达这个变量定义式时,你便得承受构造成本;当这个变量离开其作用域时,你便得承受析构成本.即使这个变量最终并未被使用,仍需耗费这些成本,所以你应该尽可能避免这种情形.std::string encryptPassword(conststd::string & pas原创 2015-06-22 17:58:08 · 320 阅读 · 0 评论 -
<Effective C++>读书笔记-3
条款18:让接口容易被正确使用,不易被误用条款19:设计class犹如设计type条款20:宁以pass-by-reference-to-const替换pass-by-valueclass Person{public: Person(); virtual~Person(); …private: std::stringnam原创 2015-06-18 14:21:39 · 425 阅读 · 0 评论 -
c++:不要重新定义继承而来的non-virtual函数
资料摘自class B{public:void mf();};void B::mf(){std::coutmf()"}class D:public B{public:void mf();};void D::mf(){std::coutmf()"}int _tmain(int argc, _TCHAR* argv[]){原创 2015-05-30 16:40:37 · 666 阅读 · 0 评论 -
<Effective C++>读书笔记-2
条款10:令operator=返回一个reference to *this关于赋值,有趣的是你可以把它们写成连锁形式:int x, y, z;x = y = z = 15; //赋值连锁形式同样有趣的是,赋值采用右结合律,所以上述连锁赋值被解析为:x = (y =(z = 15));这里15先被赋值给z,然后其结果再被赋值给y,然后其 结果再被赋值给x.为了实现”连锁赋原创 2015-06-16 16:46:41 · 349 阅读 · 0 评论 -
学习C++推荐书籍
转载于:http://www.cnblogs.com/cutepig/archive/2009/02/26/1399032.html(一)语言入门:《C++ Primer》最新版本:第三版(第四版国外已上架,国内一些网上书店也在预订中)适合有丰富C经验,缺乏C++经验的。不过我个人一直认为此书带着过于强烈的C语言的痕迹,对于C++的学习未必是好事。《The C++ Prog转载 2015-05-21 13:07:00 · 577 阅读 · 0 评论 -
c++资源之不完全导引 (收藏)
转载于:http://blog.csdn.net/tingya/article/details/1359827撰文/ 曾毅 陶文最后更新:2004年6月12日声明:.本文2004年5月首发于《CSDN开发高手》,版权归该杂志与《程序员》杂志社所有。杂志限于篇幅部分内容有所删节,此处版本为相对完整版本。本文为介绍性文章,会随笔者学习C++语言不断更新。前言无数次听到“转载 2015-05-20 18:01:11 · 652 阅读 · 0 评论 -
数据结构:树
资料摘自树树结构的特点是它是由唯一的起点“根”开始的“节点”集合。图11.4中,结点A是根根。如果用家族树的概念,一个结点可被看作“双亲”,它指向0个、1个或更多的子节点。从根到节点之间的路径可以提供一种被称作节点的“层次”这样的度量。节点的层次等于从根到节点之间路径的长度。根的层次为0,根的每个子节点的层次为1,下一层节点的层次为2,以此类推。如下图所示:原创 2015-05-06 16:50:36 · 505 阅读 · 0 评论 -
算法:常见的几种排序
资料摘自选择排序选择排序所遵循的过程来自于我们的经验。幼儿园老师通常用选择法将孩子们按身高排队。对以随机顺序排列的一组学生,老师反复从组中挑选出最矮的学生并将他或她移到正在形成的按高矮个排列的队列中。这一过程一直持续到所有学生都被移动到有序队列中,如下所示://用选择排序算法对类型为T的n元数组进行排序templatevoid SelectionSort(T A[]原创 2015-05-11 21:18:04 · 721 阅读 · 0 评论 -
数据结构:二叉搜索树
资料摘自一棵普通的二叉树中可以存放数据,且在我们需要增加、删除或查找数据项时能提供快速访问。树结构可以显著地发送搜索的性能,因为到达一个数据的路径最长不超过树的深度。 对于一个含10000个元素的表,用顺序搜索法查找一个元素的预期比较次数是5000,而在一棵完全二叉树上进行同样的搜索,需要进行的比较不会超过14次。为了将元素存储在树中以供有效访问,必须设计一种可原创 2015-05-10 19:47:50 · 349 阅读 · 0 评论 -
<Effective C++>读书笔记-5
资料摘自条款30:透彻了解inlining的里里外外inline函数,免除函数调用成本.且当你inline某个函数,或许编译器就因此有能力对它(函数本体)执行语境相关最优化.inline函数背后的整体观念是,将”对此函数的每一个调用”都以函数本体替换之.承担的结果是增加了你的目标码(objectcode)大小.在一台内存有限的机器上,过度热衷inlining会造成程序体积太大.即使原创 2015-06-23 16:04:52 · 397 阅读 · 0 评论 -
正确地将对象赋值给对象本身了吗?
资料摘自自我赋值常常被错误地应用,考虑下面的一段代码:class String{public: String & operator=(const String &s);private: char * data;};我们会轻易地使用下面的方法来实现赋值:String &String::operator=(const String & s){原创 2015-05-19 11:28:16 · 688 阅读 · 0 评论 -
c++函数传参的一些指导原则
资料摘自《C++ Primer Plus》函数传参,什么时候应使用引用、什么时候应使用指针呢?什么时候应按值传递呢?1.对于使用传递的值而不作修改的函数: 如果数据对象很小,如内置数据类型或小型结构,则按值传递。 如果数据对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const的指针。 如果数据对象是较大的结构,则使用const指针或const引用,以提高原创 2015-12-21 15:47:02 · 603 阅读 · 0 评论 -
C++命名空间
资料摘自《C++ Primer Plus》c++关于全局变量和局部变量的规则定义了一种名称空间层次。每个声明区域都可以声明名称,这些名称独立于其他声明区域中声明的名称。在一个函数中声明的局部变量不会与在另一个函数中声明的局部变量发生冲突。定义新的名称空间下面使用关键字namespace创建名称空间namespace Jack {double pail;void fetch(原创 2016-01-02 16:24:54 · 472 阅读 · 0 评论 -
利用C++11实现一个自动注册的工厂
转载于:http://geek.csdn.net/news/detail/48963工厂方法是最简单的创建派生类对象的方法,也是很常用的,工厂方法内部使用switch-case根据不同的key去创建不同的派生类对象,下面是一个伪代码。Message * create(int type) {switch(type) {case MSG_PGSTATS:m = new MP转载 2016-01-02 14:12:19 · 1998 阅读 · 0 评论 -
C++变量的存储持续性、作用域和链接性
资料摘自《C++ Primer Plus》存储持续性1自动存储持续性:在函数定义中声明的变量(包括函数参数)的存储持续性为自动的。它们在程序开始执行其所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放。2静态存储持续性:在函数定义外定义的变量和使用关键字static定义的变量的存储持续性都为静态。(请注意)它们在整个运行过程中都存在。3线程存储持续性(原创 2015-12-29 12:08:10 · 1340 阅读 · 0 评论 -
<Effective C++>读书笔记-7
资料摘自条款41:了解隐式接口和编译期多态条款42:了解typename的双重意义条款43:学习处理模板化基类内的名称假设我们需要撰写一个程序,它能够传送信息到若干不同的公司去。信息要不译成密码,要不就是未经加工的文字。如果编译期间我们有足够信息来决定哪一个信息传至哪一家公司,就可以采用template的解法:class CompanyA{public:...voi原创 2015-11-03 15:21:59 · 354 阅读 · 0 评论 -
<Effective C++>读书笔记-8
资料摘自条款44:将与参数无关的代码抽离templatesTemplates是节省时间和避免代码重复的一个奇方妙法。不同需要键入20个类似的classes而每一个带有15个成员函数,你只需键入一个class template,留给编译器去具现化那20个你需要的相关class和300个函数。Function templates有类似的诉求。替换写许多函数,你只需写一个function tem原创 2015-11-04 15:51:20 · 344 阅读 · 0 评论 -
linux下网络程序遭遇SIGPIPE的解决(转)
转载于:http://blog.chinaunix.net/uid-20135786-id-3409085.html问题描述:我的一个服务器程序, 在Windows下运行正常.但当在Linux(centos 6.3)下,进行对端未开启的异常测试时,出现莫名退出 . 最后跟踪到是write调用导致退出. 用gdb执行程序, 退出时提示"Broken pipe".转载 2015-09-29 19:20:15 · 1622 阅读 · 0 评论 -
<Effective C++>读书笔记-1
条款01:视C++为一个语言联邦条款02:尽量以const,enum,inline替换#define条款03:尽可能使用const条款04:确定对象被使用前已先被初始化条款05:了解C++默默编写并调用哪些函数什么时候empty class不再是个empty class呢?当C++处理过它之后.是的,如果你自己没有声明,编译器就会为它声明一个copy构造函数,一个copy as原创 2015-06-15 13:53:37 · 362 阅读 · 0 评论 -
<Effective C++>读书笔记-6
资料摘自条款32:确定你的public继承塑模出is-a关系看下例:class Bird{public: virtualvoid fly(); //鸟可以飞 …};class Penguin:public Bird{ //企鹅是一种鸟 … };上述继承体系说企鹅可以飞,但我们都原创 2015-06-25 13:59:35 · 430 阅读 · 0 评论 -
数据结构:栈
资料参考自原创 2014-05-03 02:51:20 · 536 阅读 · 0 评论 -
数据结构:链表
以下资料摘选自链表由一系列结点组成,其第1个元素称为头结点。链表又分为单向链表和双向链表。下面是单向链表的简单示例结点类:templateclass Node{ private: //next指向下一结点 Node *next; public: //data为数据成员 T data; //构造函数原创 2014-09-25 01:43:00 · 450 阅读 · 0 评论 -
数据结构:队列
资料参考自原创 2014-05-03 03:11:13 · 552 阅读 · 0 评论 -
C++:浅说模板定义
定义函数模板如果想要编写函数比较两个值的大小,我们可能这样写:int compare(const string &v1,const string &v2){ if(v1 if(v1>v2) return 1; return 0;}int compare(const double &v1,const double &v2){ if(v1 if(v1>v2)原创 2013-12-18 23:43:27 · 618 阅读 · 0 评论 -
【C++11】nullptr关键字
转载于:http://blog.csdn.net/soaliap/article/details/7663865从1972年C语言刚刚诞生以来,常数0就扮演着整数(int)0和空指针( null pointer )两种角色。为了避免理解上的二义性,C语言通常使用NULL宏来表示空指针,NULL宏通常被定义为(void *)0或0, 而C++仅仅采用0来表示空指针,这样存在一个问题:比如对于重载转载 2013-12-18 17:42:27 · 9352 阅读 · 0 评论 -
C中FILE的定义
在"stdio.h"中有如下定义struct _iobuf { char *_ptr; //指向文件输入的下一个位置 int _cnt; //当前缓冲区的相对位置 char *_base; //指向文件的起始位置 int _flag; //文件标志 int _f原创 2013-12-18 14:49:40 · 2534 阅读 · 0 评论 -
va_list-关于方法变参的问题
由于网上太多关于此题目的优秀资源,所以下面的都是些摘自网络资源的片段。下面片段摘自:http://baike.baidu.com/link?url=VUkCVXA6Q2lgVB7q9D9A84H3_JixWri0YNiO4Gey8MXaKPBfRae4-rAfufjKpUWN-rbIsqdqRg0gbHrtgGXXF_概述: VA_LIST 是在C语言中解决变参问题的一组原创 2013-12-31 16:21:46 · 1110 阅读 · 0 评论 -
Google C++编程规范(六)命名约定
选自《Google C++编程规范》最重要的一致性规则是命名管理,命名风格直接可以直接确定命名实体是:类型、变量、函数、常量、宏等等,无需查找实体声明,我们大脑中的模式匹配引擎依赖于这些命名规则。命名规则具有一定随意性,但相比按个人喜好命名,一致性更重要,所以不管你怎么想,规则总是规则。1.通用命名规则(General Naming Rules)函数命名、变量命名、文件命名应具有描述性转载 2013-11-24 01:54:31 · 816 阅读 · 0 评论 -
C++:#pragma once与 #ifndef的区别
转载于:http://www.cppblog.com/szhoftuncun/archive/2007/10/28/35356.html为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef _转载 2013-11-18 18:12:50 · 731 阅读 · 0 评论 -
Google C++编程规范:(三)类
附:文献资源来自编程规范>类是C++中基本的代码单元,自然被广泛使用。本节列举了在写一个类时要做什么、不要做什么。1.构造函数(Constructor)的职责构造函数中只进行那些没有实际意义的初始化,可能的话,使用Init()方法集中初始化为有意义的数据。定义:在构造函数中执行初始化操作优点:排版方便,无需担心类是否初始化。缺点:在构造函数中执行操作引起的问题有:1)构转载 2013-11-17 22:56:19 · 839 阅读 · 0 评论 -
Google C++编程规范:(四)Google特有的风情
附:文献资源来自编程规范>Google有很多自己实现的使C++代码更加健壮的技巧、功能,以及有异于别处的C++的使用方式。1.智能指针(Smart Pointers)如果确实需要使用智能指针的话,scoped_ptr完全可以胜任。在非常特殊的情况下,例如对STL容器中对象,你应该只使用std::tr1::shared_ptr,任何情况下都不要使用auto_ptr。“智能”指针看上去转载 2013-11-17 23:37:04 · 1330 阅读 · 0 评论 -
Google C++编程规范:(二)作用域
附:文献资源来自编程规范>1.命名空间(Namespaces)在.cc文件中,提供使用不具名的命名空间(unnamed namespaces)。使用具名命名空间时,其名称可基于项目或路径名称,不要使用using指示符。定义:命名空间将全局作用域细分为不同的、具名的作用域,可有效防止全局作用域的命名冲突。优点:命名空间提供了(可嵌套)命名轴线(name axis)当然,类也提供了(可转载 2013-11-16 15:42:40 · 1010 阅读 · 0 评论 -
C++:浅说指针比较
对于一些普通的值比较,如下:int v1 = 4;int v2 = 4;int v3 = 5;则v1 == v2 为true&v1 == &v2 为falsev1 == v3 为false上面v1、v2、v3都有各自的存储地址和值,而v1 == v2 比较的是它们的值,这里它们的值都等于4,所以条件为真;同样v1 == v3 比较的也是它们的值,所以条件为假原创 2013-12-19 15:40:53 · 1017 阅读 · 0 评论 -
编写你的第一个垃圾收集器
转载于:http://blog.jobbole.com/53376/本文由 伯乐在线 - deathmonkey 翻译自 Bob Nystrom。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。伯乐在线补充:本文作者 Bob Nystrom 是 Google Dart 团队的一名工程师,所以下文中”处理一些工作上的事情“中的链接是指向了 Dart 官网。Bob 之前(曾在转载 2013-12-23 09:59:45 · 889 阅读 · 0 评论 -
算法:顺序查找与折半查找
资料摘自:typedef int DataType;//顺序查找算法//用顺序查找在n元数组list中查找与key等值的元素,返回该数组元素的下标//若未找到,则返回-1int SeqSearch(DataType List[], int n, DataType key){ for(int i = 0; i { if(List[i原创 2015-05-02 17:08:06 · 8473 阅读 · 0 评论 -
异常与清理
下述资源摘自原创 2014-07-02 23:17:39 · 582 阅读 · 0 评论 -
c++里的 pthread_create 函数小结
转载于:http://blog.csdn.net/wh_19910525/article/details/12947567 在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 在C语言中,我们使用pthread_create创建线程,线程函数是一个全局函数,所以转载 2014-03-27 11:49:59 · 841 阅读 · 0 评论 -
C++的Json解析库:jsoncpp和boost
转载于:http://blog.csdn.net/hzyong_c/article/details/7163589JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的json解析库的使用方法。json官网上列出了各种语言对应的json解析库,转载 2014-03-27 11:32:13 · 745 阅读 · 0 评论 -
23种设计模式(3):抽象工厂模式
转载于:http://blog.csdn.net/zhengzhb/article/details/7359385定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区转载 2014-04-04 19:54:29 · 580 阅读 · 0 评论