- 博客(29)
- 资源 (10)
- 收藏
- 关注
转载 在链表中删除指定值的元素
在网上看到很多删除链表中的元素都是指定了位置的,如何删除所有值为x的节点呢,下面以int节点的单链表为例说明: 这是C++类中的实现 void List::removeData(int data) { for(Node** cur = &m_head;*cur;) { Node* entry = *cur; if(entry->data == data) {
2013-11-19 20:37:32 2666 1
转载 IOS-表视图中添加搜索功能
在移动应用程序的世界里,用户对信息获取的速度要求非常高! iOS用户希望他们需要的信息能够迅速地,直观地展现在他们面前。 因为UITableView的上下滚动能让用户迅速,自然地浏览大量信息,许多基于UIKit的应用都使用了UITableView来组织信息。但如果信息量非常非常大,让用户上下滚动如此长的列表是非常没有效率的。所以一个搜索的功能就是必须的了。 幸运的是,UIKit里
2013-10-23 01:04:38 16639
原创 IOS学习-导航
1.使用Xcode4.2创建导航使用Single View application模板程序 需要选中Storyboard选项 2.创建成功后会看到一个Navigation Controller这就是一个导航控制器,负责控制画面导航。 选择Editor中的Embed in 菜单在导航控制器中嵌入视图控制器
2013-10-22 11:17:07 695
原创 面试题:输入一个正整数n,输出所有的连续正整数之和等于n的序列
先说下题目: 如果你输入的数字是15 那么输出为1 2 3 4 5 、4 5 6 、 7 8 这个题目在剑指offer中有一个做法,但是不是最好的做法,面试官说复杂度过高: 剑指offer上面的解法是首先设置两个值i=1和j=2,一个表示开头的正整数,一个表示结尾的正整数。当正整数的和大于15的时候i向后移动,当和15的时候j向后移动。等的时候输出一个,到后继续找。 仔细琢磨结合网上的代
2012-09-29 16:56:59 6459
原创 条款3-4:绝对不要以多态的方式处理数组与default constructor
条款3:绝对不要以多态的方式处理数组 class BST{ ...... }; class BalancedBST:public BST{.......}; void printBST(ostream& s,const BST array[ ],int num) { for(int i = 0;i s } 当你传入BST的数组是没有什么问题的。 现在传入B
2012-07-15 16:55:44 584
原创 条款2:最好使用C++转型操作符
C++提供4种转型 1.static_cast 他基本上具有和旧式c语言一样的功能,一样的限制,如不可以将struct转换为int,不可以将int转换为pointer等。 使用方法: static_cast(expression) 2.const_cast 除去常量性质 3.dynamic_cast 用于继承体系的转型,不是继承体系则出现错误。主要是用于将指
2012-07-15 16:29:21 375
原创 基础议题 条款1:仔细区别pointer和reference
1.首先我们需要认识到没有所谓的null reference。所以如果你有一个变量,其目的用来指向一个对象,但是也有可能不指向任何对象,那么你应该用pointer,因为你可以将pointer设置为null。换句话说,如果你不允许变量为null,那么使用reference。 具有以下行为的程序员应该隔离: char *pc = 0; char& rc = pc; 这样编译器可能会产生
2012-07-15 16:19:50 521
原创 条款38-40:通过复合塑模出has-a或"根据某物实现出"与private继承、多继承
条款38:通过复合塑模出has-a或"根据某物实现出" 复合是类型之间的一种关系,当某种类型的对象内包含其他类型的对象,我们说这是一种复合。 public继承是is-a关系,表示是一种的意思。复合意味着has-a关系,表示有一个或者is-implemented-in-terms-of(根据某物实现出)。 现在假设你需要一个template制造出一组classes表示不重复的对象组成的sets
2012-07-11 16:47:36 521
原创 条款36-37绝不重新定义继承而来的non-virtual函数与缺省参数
条款36:绝对重新定义继承而来的non-virtual函数 条款37:绝不重新定义继承而来的缺省参数 这两个条款说的绝不没有说不可以,意思是最好是这么做。个人觉得这两个条款没有太多可说的。 这里讲下缺省参数的问题。 在C++面向对象的技术中,virtual函数的类型是动态的,但是参数是静态的。具体可以参考《C++ primer》 以下的代码是糟糕的: class Sharp {
2012-07-11 16:01:23 559
原创 条款35:考虑virtual函数以外的其他选择
假如你正在写一个视频游戏软件,你想计算不同人物的健康指数,那么平常的方法肯定是这样实现: class GameCharacter { public: virtual int healthValue() const; ........ }; healthValue被声明为virtual,说明会提供缺省方法。但是从某个角度来讲这里存在弱点。这里考虑一些其他替代方法:
2012-07-11 10:23:50 1219 1
原创 STL空间配置器
关于STL空间配置器源码有关的文件为: 他包括 负责对象的构造与析构 负责内存空间的配置与释放 空间配置器分为一级和二级 一级主要是针对内存较大的分配,二级配置器则是针对较小的内存。 二级配置器的解析:以链表的形式分成断 首先看表中对应的空间是否有剩余,如果没有在内存池中查看,内存池中没有向堆内存中请求。还是没有,再看表中较大的地方有没有剩余,比
2012-07-10 22:48:41 316
原创 条款34:区分接口继承与实现继承
public继承经过仔细的检查后发现主要有两部分组成:函数接口继承和函数实现继承,他们的区别就相当于声明与定义的区别。作为类的设计者你有可能希望继承接口,有可能继承实现或者两者都需要。、 class Sharp { public: virtual void draw() cosnt = 0; virtual void error(const std::string&
2012-07-10 13:25:46 297
原创 条款33:避免遮掩继承而来的名称
这里主要说的是继承体系中的作用域 class B{ private: int x; public: virtual void mf1()=0; virtual void mf2(); void mf3(); ... }; class D:public B { public: virtual void mf1(); void mf4();
2012-07-10 10:39:19 481
原创 第六部分 继承与面向对象设计 条款32:确定你的public继承是is-a关系
以C++进行面向对象编程,有一个重要的规则,public继承意味着是is-a关系,所谓is-a就是一种 的意思。比如我们用Person为基类,Student为派生类实现public继承。每个Student都是Person,但是每个Person不一定都是Student。在继承体系中,任何函数如果愿意接受一个Person的实参,那么也愿意接受一个Student的对象。 如:void eat(cons
2012-07-10 09:43:39 526
原创 条款31:将文件间的编译依存关系降至最低
我们还是从一个例子开始出发: class Person { public: Person(const std::string& name,const Date& birthday,const Address& addr); std::string name() const; std::string birthDate() const
2012-07-09 15:32:06 431
原创 条款29-30:为“异常安全”而努力是值得的与inlining的里里外外
条款29:异常安全 假设有个class用来表现夹带背景图案的GUI菜单。这个class希望用于多线程环境,所以它有个互斥器作为并发控制用: class PrettyMenu{ public: ... void changeBackgroud(std::istream& imgSrc); ... private: Mutex
2012-07-09 15:31:22 342
原创 条款28:避免使用handles指向对象内部成分
看下面的问题: class Point{ public: Point(int x,int y); ... void SetX(int newVal); void SetY(int newVal); ... }; struct RectData{ Point ulhc; Point lrhc; }
2012-07-09 15:30:10 8839
原创 条款27:尽量少做转型动作
与C语言比,C++提供四种新式转型动作: 1.const_cast (expression) 除去对象的常量性 2.dynamic_cast (expression) 主要执行“安全向下转型”。这种无法由旧式语言执行。成本耗费最大。 成本花费高,为什么还需要这种转型?通常是因为你想在一个你认定的derived class对象身上执行derived class
2012-07-09 15:28:45 361
原创 第五部分 实现之条款26:尽可能延后变量定义式的出现时间
条款26:尽可能延后变量定义式的出现时间 在C++中只要你定义了一个类型且带有构造函数和析构函数,那么他就有成本开销。所以变量不应该过早地定义,看下面的case: std::string encryptyPassword(const std::string& password) { using namespace std; string en
2012-07-09 15:27:38 325
原创 第四部分(4)(条款25:考虑写出一个不抛出异常的swap函数)
条款25:考虑写出一个不抛出异常的swap函数 所谓swap两个对象,就是将两个对象的值彼此赋予对方。标准库可能是这样实现的: namespace std{ template void swap(T& a,T&b) { T temp(a); a = b; b = temp; } }
2012-07-09 15:19:23 417
原创 第四部分(3)(条款24:若所有参数皆需要数据转型,请为此采用non-member函数)
条款24:若所有参数皆需要数据转型,请为此采用non-member函数 假设有以下类(有理数类): class Rational{ public: Rational(int numerator=0, // constructor刻意不为explicit,允许int-to-Rational int denominator=1)
2012-07-09 15:18:18 293
原创 第四部分 设计与声明(1)(条款18-22)
条款18:让接口容易被正确使用,不易被误用 我们以日期函数为例来讨论 class Date { public: Date(int month,int day,int year); ..... }; 这个类客户容易犯错: Date d(30,3,1995); //应该是Date d(3,30,1995); Date(2,30,1995) //2月没有30 为了
2012-07-09 15:01:35 332
原创 第四部分 设计与声明(2)(条款23:宁以non-member、non-friend替代member函数)
条款23: 宁以non-member、non-friend替代member函数 思考下面的问题: 一个网页浏览器类 class WebBrowser{ public: ... void clearCache();//清除Cache void clearHistory();//清除History void removeCo
2012-07-09 14:43:34 310
原创 第四部分 设计与声明(1)(条款19-22)
条款18:让接口容易被正确使用,不易被误用 我们以日期函数为例来讨论 class Date { public: Date(int month,int day,int year); ..... }; 这个类客户容易犯错: Date d(30,3,1995); //应该是Date d(3,30,1995); Date(2,30,1995) //2月没有30 为了
2012-07-09 10:04:13 88
原创 第三部分 资源管理(条款13-17)
条款13 以对象管理资源 class Investment{.........}; 假设有个工产函数: Investment* createInvestment(); 现在: void f() { Investment* pInv = createInvestment(); .... delete pInv; } 这个函数看起来是没有什么问题的,但是如果在...部分
2012-07-08 13:17:04 362
原创 第三部分 资源管理(条款13-17)
条款13 以对象管理资源 class Investment{.........}; 假设有个工产函数: Investment* createInvestment(); 现在: void f() { Investment* pInv = createInvestment(); .... delete pInv; } 这个函数看起来是没有什么问题的,但是如果在...部分
2012-07-08 12:59:30 68
原创 第二部分 构造、析构与赋值运算(条款5-12)
这里是第二部分 条款 5:C++默默编写并调用哪些函数 如果你没有写构造函数、析构函数、copy构造函数和赋值操作符,C++会自己为你编写默认的函数。如果你自己编写了,C++不再合成 如果你打算在一个内含 reference成员的class内支持赋值操作,你必须自己定义赋值操作符,面对const成员,编译器的反应也是一样的。如果某个基类的copy 操作符是一个private,那
2012-07-08 10:41:18 1416
原创 第一部分:习惯C++(条款1-4)
这里是effective C++第一部分 条款1:对C++的整体认识。它包括 1. C部分。C++以C语言为基础发展而来。2.面向对象部分。3.C++泛型编程部分也叫template C++. 4.STL 条款2:用const,enum,inline对define替换 1.#define RATIO 3.14 改为const double Ratio =
2012-07-07 22:29:22 1035
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人