C++11 auto_ptr 的问题
摘要:auto_ptr作为最早的智能指针,可以实现以RAII手法管理堆区对象,但它设计的本意只是简单的利用C++对于栈区对象的自动析构管理堆区对象, 并不像shared_ptr那样包含引用计数,可以在每次拷贝的时候多出一个“分身”。这时候,拷贝的语义就成了很大的问题(按理说直接禁掉可能好好些), 于是就出
阅读全文
std::vector<bool>中的坑
摘要:http://www.cplusplus.com/reference/vector/vector/?kw=vector C++中,vector<bool>为了达到节省内存的目的,专门做了特化,大概方式就是用bit位来存储数组中的元素。代价就是,这个容器里面的内置类型乱掉了: member type
阅读全文
C++11 std::copy
摘要:这个函数并不是简单的while(first != last){ *result = *first; result++; first++; }事实上这种写法是最具普适性的,值要求inputIterator是输入迭代器,outputIterator是输出迭代器可以想像我们熟悉...
阅读全文
C++11 move_iterator
摘要:template class move_iterator { Iterator current; public: typedef Iterator iterator_type; typedef typename std::iterator...
阅读全文
STL中的lower_bound和upper_bound的理解
摘要:STL迭代器表述范围的时候,习惯用[a, b),所以lower_bound表示的是第一个不小于给定元素的位置upper_bound表示的是第一个大于给定元素的位置。譬如,值val在容器内的时候,从lower_bound到 upper_bound表示的就是整个容器中与val相等的元素的位置了
阅读全文
STL sort “invalid operator <”
摘要:跟踪了下,是比较函数(下面的_Pred)的问题:template inlinebool _Debug_lt_pred(_Pr _Pred,_Ty1&& _Left, _Ty2&& _Right,_Dbfile_t _File, _Dbline_t _Line){ // test if _Pred(_...
阅读全文
C++11中的array
摘要:stl中的vector功能相比普通数据而言是要强大很多的,代价是需要动态的内存管理机制(分配,再分配,释放)。而有时候我们只需要普通的数组而已,这就带来了效率上的浪费。array就是用来代替普通的数组的,打开头文件,发现该模板中有如下语句:_Ty _Elems[_Size == 0 ? 1 : _S...
阅读全文
STL 中的链表排序
摘要:一直以来学习排序算法, 都没有在链表排序上下太多功夫,因为用得不多。最近看STL源码,才发现,原来即使是链表,也能有时间复杂度为O(nlogn)的算法,大大出乎我的意料之外,一般就能想到个插入排序。下面的代码就是按照源码写出的(去掉了模板增加可读性),注意forward_list是C++11新加的单...
阅读全文