博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  C++

STL源码剖析 Effective C++ 55
摘要:vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size!原因如下: reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。 resize是改变容器的大小,且在创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。此时再调用push_back()函数,是加在这个新的空间后面的. 阅读全文

posted @ 2011-05-16 19:42 李大嘴 阅读(99311) 评论(3) 推荐(9)

摘要:1 template <class T, class Alloc> 2 3 void list<T, Alloc>::sort() { 4 5 if (node->next == node || link_type(node->next)->next == node) return; 6 7 list<T, Alloc> carry; 8 9 list<T, Alloc> counter[64];10 11 int fill = 0;12 13 while (!empty()) {14 15 carry.splice(carry 阅读全文

posted @ 2011-05-10 15:18 李大嘴 阅读(3473) 评论(0) 推荐(0)

摘要:你要寻找什么,而且你有一个容器或者你有一个由迭代器划分出来的区间——你要找的东西就在里面。你要怎么完成搜索呢?你箭袋中的箭有这些:count、count_if、find、find_if、binary_search、lower_bound、upper_bound和equal_range。面对着它们,你要怎么做出选择?简单。你寻找的是能又快又简单的东西。越快越简单的越好。暂时,我假设你有一对指定了搜索区间的迭代器。然后,我会考虑到你有的是一个容器而不是一个区间的情况。要选择搜索策略,必须依赖于你的迭代器是否定义了一个有序区间。如果是,你就可以通过binary_search、lower_bound、 阅读全文

posted @ 2011-04-08 16:50 李大嘴 阅读(1880) 评论(0) 推荐(2)