Timothy

链接

《Exceptional C++》------ ( 2 )
《More Exceptional C++》------ ( 2 )

《More Exceptional C++》------ ( 1 )

Timothy posted @ 2010年7月24日 06:15 in Reading Notes , 1228 阅读

 

条款一:
 
(1):std::cin和std::cout的类型是 std::istream和std::ostream, 分别是std::basic_istream<char, std::char_traits<char> > 和 std::basic_ostream<char, std::char_traits<char>的typedef。
 
(2):代码要注意可阅读性,避免简洁但却不宜读的代码.
 
(3):提高代码的可扩充性. 保证封装性,关系相分离.
 
 
 
条款二:
 
(1):std::remove(), 是将要删除的元素移到容器(或区间)的末尾,其他元素相应前移,容器(区间)的长度不会改变.  移到末尾的元素,可能保持原值,也可能不会.
 
      这样的原因: remove()是作用在迭代器上的, "从一个容器中删除迭代器所指的元素"这样的迭代器操作不存在。
 
      删除容器的元素应该使用容器的erase方法.
 
 
 
条款三:
 
(1):STL的算法使用仿函数或者函数对象时, 是传值使用。
 
 
 
条款四:
 
(1):trait类: 一个封装了一组类型和函数的类,以使模板类和模板函数可以操纵 实例化类型 的对象.( 实例化类型:即模板实例化时使用的类型)
 
      trait的封装,主要是指把这些数据和接口放在一起,不是指把这些隐藏在某些外壳中,所以trait类一般都是public实现或是一个struct.
 
(2):测试一个 模板类型类 中是否有一个 T* Clone() const的函数
 
     好的实现:
 
 
 
template<typename T>
class CA
{
public:
    ...
    ~CA()
    {
         assert( IsTValid() );
    }
private:
    BOOL IsTValid()
    {
        T* (T::*test) () const = &T::Clone();
        test = NULL;   //避免未使用的变量警告
    }
 
}
 
 
条款5:typename的使用
 
条款6:容器
 
(1):关于取得容器类元素的指针(或者迭代器),要注意迭代器失效的问题.
 
(2):std中,所有的迭代器的*运算,都得到一个容器包含对象的引用
 
(3):vector<bool>的特殊性,伪容器, 在内部存储时,bool类型会优化,将会把8个bool合成一个BYTE存储,这样实际上vector中就是8个元素存储在一起的,
这样,要实现它必须写代理类,在返回标准迭代器和元素时.(这样的应用应该使用 bitset )
 
条款7:vector 和 deque
 
(1):deque是分段连续存储的,他总是在插入式与分配以后的内存, 而vector是在内存满时在分配.
而deque在内存清理时,也比vector费劲.
(2):vs vector:deque提供了push_front, 但是减少了 reserve() 和 capacity() 函数.
(3):如何清除多余的vector内存, vector<T>( vec ).swap( vec )....vec多余的分配内存即清空和释放了(vec.capacity() 等于或只略大于 vec.size() )
 同理, vector<T>().swap( vec ),...把vec的内容和内存都清理( vec.capacity() = 0现在 ) ,对deque容器是同样的.
 
条款8:set 和 map
(1):map<key, value>的迭起器返回的是 pair<const key, value>, 若采用const_cast的方法强制修改key,不会引起map数的重新旋转,会让map失去存储意义.
应该采用 先erase, 再insert的方式, set同理.
 
条款9:相同的代码吗?
(1):避免使用宏, 运算符重载要保持运算符的普通语义.
(2):f( a++ ), 执行顺序是: 先a++, 再用a的旧值掉用 f(),和代码:f( a ); a++; 的区别是: 在f()发生异常时, 第一种++已发生, 第二种还没有
在比如 f = list<T>::erase(), a = iterator中, 第一个合法, 第二个却不合法了,因为erase会引起迭代器失效....特别要注意函数的副作用,安排程序语序.
 
条款10:模板特殊化和重载
(1):非模板函数 优先于 模板函数匹配(不发生隐式转换), 除非是显式的调用模板函数.
 
 
条款11:略
 
条款12:内联
 
条款13:缓式优化之一 - copy on write
(1) 如题
(2) 关于容器内存不够时,扩展内存的策略:
    a),精确增长,   内存分配 O(n), 字符copy动作 O(n), 空间浪费 0
    b),固定长度增加,        O(n),              O(n),         O(1)
    c),指数增加(每次增加0.5当前size)    O(logn) O(1)     O(n)
条款14:缓式优化值二 - 实现copy on write
 
条款15:缓式优化值三 - 完善copy on write
条款16: 多线程环境下的copy on write(
( 13 -16 一个string类的优化 )
Avatar_small
Manipur 10th Class 说:
2023年7月20日 17:00

BOSEM Board 10th Class Exam date Sheet 2024 available at Official Website, Manipur Board as they are Preparing for Their 10th Class Exam 2024, A Careful Analysis of the Latest Syllabus gives them an idea of the Chapters and Topics which need to be Prepared for the Public Examinations,Manipur Board Regulates and Supervises the System of Manipur Board High School Manipur 10th Class Syllabus 2024 Leaving Certificate Examination, Students This Webpage, we are Providing the Manipur Class syllabus 2024 All English, Hindi, Bengali, Sanskrit, Nepali Medium Subjects can be Downloaded Pdf Format.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter