打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C ++

C++

摘要: 原文地址:http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threadsAvoiding and Identifying False Sharing Among ThreadsAbstractIn symmetric multiprocessor (SMP) systems, each processor has a local cache. The memory system must guarantee cache coherence.False sharing oc阅读全文
posted @ 2012-12-23 20:25 KingsLanding 阅读(46) | 评论 (0) 编辑
摘要: 设计模式分为三种类型,共23类。 创建型模式:单件模式、抽象工厂模式、建造者模式、工厂方法、原型模式。 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。Adapter(适配器模式):将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容而不能...阅读全文
posted @ 2012-09-30 20:37 KingsLanding 阅读(77) | 评论 (0) 编辑
摘要: 为什么要提倡"Design Pattern"呢?根本原因是为了代码复用,增加可维护性。那么怎么才能实现代码复用呢?面向对象有几个原则:开闭原则(Open Closed Principal,OCP)、里氏代换原则(LSP)、依赖倒转原则(DIP)、接口隔离原则(ISP)以及抽象类(Abstract Class)、接口(Interface)。开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其他几条,则可以看做是开闭原则的实现方法 设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。开放封闭原则 此原则是由"Bertrand Meyer"阅读全文
posted @ 2012-09-30 20:35 KingsLanding 阅读(72) | 评论 (0) 编辑
摘要: 早上起来看微博,看到大神们又在关于C++的各种讨论,找相关知识来看看,搜到了这篇文章。Google有很多自己实现的使C++代码更加健壮的技巧、功能,以及有异于别处的C++的使用方式。1. 智能指针(Smart Pointers)如果确实需要使用智能指针的话,scoped_ptr完全可以胜任。在非常特殊的情况下,例如对STL容器中对象,你应该只使用std::tr1::shared_ptr,任何情况下都不要使用auto_ptr。“智能”指针看上去是指针,其实是附加了语义的对象。以scoped_ptr为例,scoped_ptr被销毁时,删除了它所指向的对象。shared_ptr也是如此,而且,s..阅读全文
posted @ 2012-09-01 07:46 KingsLanding 阅读(189) | 评论 (0) 编辑
摘要: 记得C++ 沉思录上说过,如果数据成员有指针类型的,最好把三大函数补全,不然的话容易产生浅拷贝和内存泄露。这里给出一个简单的例子。#include <iostream>#include <vector>using namespace std;class CDemo{public: CDemo():str(NULL){ cout<< "Construct"<<endl; }; CDemo( const CDemo & D) { int length = strlen(D.str); str = new...阅读全文
posted @ 2012-08-28 22:39 KingsLanding 阅读(156) | 评论 (0) 编辑
摘要: #include <iostream>#include <stack>#include <queue>using namespace std;template<class DataType>struct BiNode{ DataType data; struct BiNode *left,*right; BiNode():left(NULL),right(NULL){}};template<class DataType>class BiTree{ public: BiTree() { root = Create();} BiTree(阅读全文
posted @ 2012-08-25 15:33 KingsLanding 阅读(74) | 评论 (0) 编辑
摘要: /* 注意C++ 的内存管理的复杂性 尤其是在merge() 之中,当融合之后如何保证被合并了的链表之后的对象的析构函数会出错,不会被delete两次 还有就是友元函数的模板写法*/#include <iostream>#include <typeinfo>using namespace std;template<class DataType>struct Node{ DataType data; Node<DataType> *next;};template<class DataType>class Linklist;templat阅读全文
posted @ 2012-08-20 21:06 KingsLanding 阅读(77) | 评论 (0) 编辑
摘要: 复习effective C++ ,今天看到了"virtual 函数以外的其它选择",里面介绍了Strategy 模式的两种实现方式,也介绍了std::function 和 std::bind 函数等,结合这段时间学习的进行一个总结。首先还是先来回顾书上的内容:问题引入:一个游戏需要对其中人们生命值,健康状况进行监控计算,因此需要定义一个专门的函数,但是不同的人物的计算方式是不同的,也就是说这个函数需要不同的实现方式。可以使用多态,这是最基本的方法。实例:class GameCharacter {public:virtual int healthValue() const;/阅读全文
posted @ 2012-08-12 10:40 KingsLanding 阅读(190) | 评论 (0) 编辑
摘要: C++ 沉思录也算是C++中的经典书籍,其中介绍OO思想的我觉得很好,但是全书中贯穿了handle,使用引用计数等,也有点不适合现代C++的设计思想。这里使用shared_ptr 智能指针改写了“句柄”这一章的程序,明显使代码量下降,而且管理方便。下面来看代码:#include <iostream>#include <memory>using namespace std;class Point{public: Point() : xval(0),yval(0){}; Point(int x, int y): xval(x), yval(y){}; Point(const阅读全文
posted @ 2012-08-10 21:11 KingsLanding 阅读(319) | 评论 (0) 编辑
摘要: 面向对象编程的三要素:数据抽象、继承以及动态绑定。这里讨论一个算术表达式树问题,如(-5)*(3+4)对应的表达式树为:我们希望通过调用合适的函数来创建这样的树,然后打印该树完整的括号化形式。例如:Expr t = Expr("*", Expr("-",5), Expr("+", 3, 4));cout << t << endl; 输出结果为:((-5)*(3+4))此外我们不想为这些表达式的表示形式操心,也不想关心它们内存分配和回收的事宜。从上面图我们可以看出,图中有两种对象节点和箭头。每个节点包含一个值——阅读全文
posted @ 2012-07-28 22:25 KingsLanding 阅读(180) | 评论 (2) 编辑
摘要: 上一回讨论的句柄技术有一个明显的缺点:为了将句柄捆绑到类T的对象上,必须要新定义一个具有类型为T的成员对象的新类。这个毛病相当麻烦,如果想新设计一个类的句柄类,就需要新定义两个类。C++之父提到过一种定义句柄类的技术可以弥补这一个缺点,主要思想就是将引用技术从数据中分离出来,把引用计数放到句柄类自己的对象之中。class Handle{ public: // 和前面一样 private: Point *p; int *u;};这里不再有指向UPoint的指针,我们使用指向Point的指针和指向一个int的指针表示引用计数。使...阅读全文
posted @ 2012-07-27 22:22 KingsLanding 阅读(63) | 评论 (0) 编辑
摘要: 第五章介绍了代理类,这个类能让我们在一个容器中存储类型不同但相互关联的对象。这种方法需要为每个对象创建一个代理,并要将代理存储在容器中。创建代理将会复制所代理的对象。 如果想避免这些复制该怎么做呢?可以使用句柄类。它允许在保持代理的多态行为的同时,还可以避免进行不必要的复制。 处于多态的环境中,我们可以知道对象的基类类型,但是不知道对象本身的类型或者怎么样复制这种类型的对象。 如果多个指针指向同一个对象,就必须考虑要在什么时候删除对象。不能太早也不能太晚,太早删除,就会有某个仍然指向它的指针存在,再使用这个指针就会产生未定义行为。删除得太晚又会占用本来早该另作它用的空间。 需要一种...阅读全文
posted @ 2012-07-26 23:12 KingsLanding 阅读(103) | 评论 (0) 编辑
摘要: 前言: OOP 的 意思 在我看来就是使用继承和动态绑定的编程方式。继承是一种抽象,它允许程序员在某些时候忽略相似对象之间的差异,又在其他时候利用这些差异。 C++ 程序员都应该知道,只有在程序通过指向基类对象的指针或基类对象的引用调用虚函数时,才会发生运行时的多态现象。 对象的创建和复制不是运行时多态的,这一点严重影响了类的设计。所以,容器——无论是类似于数组或者结构体的内建容器还是用户自定义容器类——只能获得编译时类型一致的元素值。如果有一系列类之间存在继承关系,当我们需要创建、复制和存储对象,而这些对象的确切类型只有到运行时才能知道时,则这种编译时的检查会带来一些麻烦。 通常,解...阅读全文
posted @ 2012-07-25 22:49 KingsLanding 阅读(43) | 评论 (0) 编辑
摘要: 一. 你需要一个构造函数吗? 构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。构造函数的特点:1.构造函数的命名必须和类名完全相同。2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用。 有些内太简单,它们的结构就是它们的接口,所以不需要构造函数。但是一般情况下都需要构造函数来初始化成员变量。二..阅读全文
posted @ 2012-07-25 21:56 KingsLanding 阅读(25) | 评论 (0) 编辑
摘要: 1. delete 用于释放 new 分配的空间,free 有用释放 malloc 分配的空间2. delete [] 用于释放 new [] 分配的空间3. delete 释放空间的时候会调用 相应对象的析构函数 顺便说一下new在分配空间的时候同时会调用对象的构造函数,对对象进行初始化,使用malloc则只是分配内存4. 调用free 之前需要检查 需要释放的指针是否为空,使用delete 释放内存则不需要检查指针是否为NULL5. free 和 delete 不能混用,也就是说new 分配的内存空间最好不要使用使用free 来释放,malloc 分配的空间也不要使用 delete来释放.阅读全文
posted @ 2012-07-20 21:10 KingsLanding 阅读(1198) | 评论 (2) 编辑
摘要: 一.运算符重载不能重载的运算符: 成员运算符“.” 作用域运算符“::” 条件运算符“?:” 指针运算符 * 编译预处理命令的开始符号 #运算符重载的两种形式:成员函数或者友元函数二.虚函数1. 析构函数可以是虚函数,但是构造函数不能是虚函数2. 在类体系中访问一个虚函数时,应使用指向基类的指针或对基类的指针或者对基类的引用,以满足运行时多态的要求。当然也可以像调用普通函数一样利用对象名来调用一个虚函数,这时会失去虚特性3. 虚函数必须是一个类的成员函数,不能使友元,但是它可以是另一个类的友元。另外虚函数不能是一个静态函数4. 在基类中使用虚函数保证...阅读全文
posted @ 2012-07-18 20:51 KingsLanding 阅读(170) | 评论 (0) 编辑
摘要: 游程编码是对数据压缩的一种方式,这写了一个简单的二值游程编码程序,程序功能如:原始输入:0001110011010100001100 ,压缩之后输出:33221111422也就是相当于记录每个值连续出现的次数,作为编码值。#include <iostream>#include <string>#include <vector>#include <queue>#include <iterator>using namespace std;int main(){ string str("0001110011010100001100阅读全文
posted @ 2012-06-27 22:28 KingsLanding 阅读(57) | 评论 (0) 编辑
摘要: 最近C++程序写的比较少,需要平时多写才行啊。写了一个大整数运算的程序。#include <iostream>#include <vector>#include <cstring>#include <algorithm>#include <ostream>using namespace std;typedef vector<int>::iterator Iter;class bign{ public: bign() { num.clear(); } bign(int n) { ...阅读全文
posted @ 2012-06-27 21:37 KingsLanding 阅读(33) | 评论 (0) 编辑
摘要: CONST:the C++ compiler avoids creating storage for a const, but instead holds the definition in its symbol table. When you use extern with const, however, you force storage to be allocated .const modified value cannot be used at compile time because the compiler is not required to know the contents 阅读全文
posted @ 2012-06-25 19:29 KingsLanding 阅读(47) | 评论 (0) 编辑
摘要: 图的m-着色判定问题——给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色?图的m-着色优化问题——若一个图最少需要m种颜色才能使图中任意相邻的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的最小色数m的问题称为m-着色优化问题。算法思路:color[n]存储n个顶点的着色方案,可以选择的颜色为1到mt=1对当前第t个顶点开始着色:若t&gt;n则已求得一个解,输出着色方案即可否则,依次对顶点t着色1到m, 若t与所有其它相邻顶点无颜色冲突,则继续为下一顶点着色;否则,回溯,测试下一颜色。/*=====阅读全文
posted @ 2012-06-2
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Huihoo Power! - 对比C 和Java
C++基础之重载运算符的详细介绍
HeapAlloc、GlobalAlloc、LocalAlloc、VirtualAlloc、malloc、new的异同
匠人的百宝箱--匈牙利命名法
VC++中有关句柄和指针及其转换
挑战30天 C/C 入门极限系列教程-
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服