Robin Chow's C++ Blog

 

[导入]More Exceptional C++ 之 1

编码原则:
  1. 更注重可读性,避免写简洁的代码(简洁但是难以读懂和维护)。
  2. 注重可扩展性和封装。
  3. 考虑解决一个问题时是否需要使得解决方案具有扩展,还是仅仅解决当前的问题。注意二者之间的平衡。

文章来源:http://my.donews.com/robinchow/2007/01/17/exiydzbwcigvtcumybdrwjyrgeojvifzfoyj/

posted @ 2007-10-23 20:47 Robin Chow 阅读(63) | 评论 (0)编辑 收藏

[导入]More Exceptional C++ 之 2

范型算法 remove():
remove() 没有真正从容器中删除元素,容器的元素个数也不会改变。remove() 所做的是把未被删除的元素往前移动,以填充被删除元素留下的空位,而把被删除元素移到容器后面。最后,remove() 返回一个指向第一个被删除元素的 iterator,如果没有元素被删除,则返回 end() iterator。
remove() 如此工作的原因是它不是作用在容器上,而是作用在 iterator上,但是 iterator 并没有像“删除 iterator 指向的元素而不管是什么容器”的操作。要删除元素必须要用到直接作用在容器上的操作,如 erase()。
文章来源:http://my.donews.com/robinchow/2007/01/17/sowxiqnuyycsamoatekjugwfqwlehlxzztxi/

posted @ 2007-10-23 20:47 Robin Chow 阅读(66) | 评论 (0)编辑 收藏

[导入]C++ GUI库大全


C++博客 - 暮暮息幕幕新 - [摘录]C++ GUI库大全
文章来源:http://my.donews.com/robinchow/2007/01/17/jmgltqvkdrrulheooyjlknnbayxdlijuupfo/

posted @ 2007-10-23 20:47 Robin Chow 阅读(96) | 评论 (0)编辑 收藏

[导入]More Exceptional C++ 之 3

predicate(断言)是指给出 yes/no 的函数或者函数对象。使用函数对象的好处是可以存储变量。
predicate 通常被算法用来作用于一个元素并且给出一个判定,比如是否大于某个数。
有状态的 predicate 是指状态在运行时可能改变的 predicate。对于有状态的 predicate 来说,各个副本之间不是等价的。对于算法来说,要使用 有状态的 predicate 需要满足两个条件:
  1. 算法必须保证不产生 predicate 的副本。
  2. 算法必须对元素以确定的顺序来应用 predicate(例如,first 到 last)。
C++ 标准不要求标准算法满足以上两个条件,因此建议不要使用带状态的 predicate。

文章来源:http://my.donews.com/robinchow/2007/01/17/okqqyqklkznuiqhlavokqgztcltuwiqlsgcq/

posted @ 2007-10-23 20:47 Robin Chow 阅读(93) | 评论 (0)编辑 收藏

[导入]More Exceptional C++ 之 4

typename 常常在模板类的声明或定义中用来声明一个类型。在模板中,如果一个和模板参数相关的名字没有在名字解析中被找到,或者被关键字 typename 修饰,则它不能作为一个类型。考虑下面的代码:
template< typename T >
class X_base
{
public:
typedef T instantiated_type;
};

template< typename A, typename B >
class X : public X_base< B >
{
public:
bool operator()( const instantiated_type& i ) const
{
return i != instantiated_type();
}
// ... more stuff ...
};

instantiated_type 和模板参数类型相关,使用名称解析不能找到并且没有被关键字 typename 修饰,因此将导致编译错误,正确的方法是使用关键字 typename。
文章来源:http://my.donews.com/robinchow/2007/01/18/gywtqxaalrvetoldhdtlmchhlsmnfxklwgem/

posted @ 2007-10-23 20:47 Robin Chow 阅读(80) | 评论 (0)编辑 收藏

[导入]More Exceptional C++ 之 5

小结:
  • 将 vector 和 C 风格的数组混用是安全的。可以采用如下方法引用 vector 内的元素: &c[0]。
  • 优先使用 vector 而不是 deque。如果需要一些特殊操作,比如在数组两头插入和删除,或者不需要连续的存储空间,则使用 deque。
  • 使用和临时对象交换的方法来压缩 vector 或者 deque 的空间。vector< Customer >(c).swap(c):将 c 的空闲空间释放;vector< Customer >().swap(c):将 c 的所有空间释放。
  • 如上一条款所提到:除非确实需要进行空间优化,否则总是使用 deque< bool > 而不是 vector< bool >。

文章来源:http://my.donews.com/robinchow/2007/01/23/xflxtusuynvqylhgqboduxqzfjholpejuphn/

posted @ 2007-10-23 20:47 Robin Chow 阅读(79) | 评论 (0)编辑 收藏

[导入]More Exceptional C++ 之 6

在 Map 中,改变 Key 的惟一方法是先将它删除,再插入一个修改过的值。不要对 Key 进行任何直接或间接的修改,这样可能导致数据处于不确定的状态。Map 的 Key 是 const 的,而 Set 则不一定,因为 C++ 标准没有给出强制的规定。

文章来源:http://my.donews.com/robinchow/2007/01/23/hoknidslvhgfwhsdmssqezjefwyazkshzcuh/

posted @ 2007-10-23 20:47 Robin Chow 阅读(67) | 评论 (0)编辑 收藏

[导入]More Exceptional C++ 之 7

小结:
  1. 避免使用宏,它常常使得代码难于读懂从而不方便维护。
  2. 再次注意,非 const 引用不能和临时对象进行绑定。这是函数参数应该尽量使用 const 引用的原因。
  3. 总是为重载操作符保留重载语义,也就是说,和内置类型的语义保持一致。
  4. 避免如下的代码:l.erase(i); i ++; 因为 erase 操作之后,i 已经失效,因此 i ++ 是无效的。
    正确的写法如下:l.erase( i ++);

文章来源:http://my.donews.com/robinchow/2007/01/23/zfcdeisfqfhckfpgukvjrmwoicoouodtugwy/

posted @ 2007-10-23 20:47 Robin Chow 阅读(67) | 评论 (0)编辑 收藏

[导入]Ten reasons why every programmer should learn C(英文)



Ten reasons why every programmer should learn C


文章来源:http://my.donews.com/robinchow/2007/01/25/vquwpymxknruwglornwepdtsfdwqmyjipeef/

posted @ 2007-10-23 20:47 Robin Chow 阅读(69) | 评论 (0)编辑 收藏

[导入]More Exceptional C++ 之 8

关于 C++ 构造函数:
  • 构造函数通过到达函数体结尾或者 return 表达式结束,此时对象开始存在,或者
  • 构造函数抛出一个异常,那么对象不仅不存在,而且从来就没有作为一个“对象”存在过。
除了以上两者,再没有其它可能。

文章来源:http://my.donews.com/robinchow/2007/01/29/pcrflkpnmgqpmgsigqxqftmyehrvvsnlufrf/

posted @ 2007-10-23 20:47 Robin Chow 阅读(93) | 评论 (0)编辑 收藏

仅列出标题
共9页: 1 2 3 4 5 6 7 8 9 

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜