Hello from lk's World

03 May 2014 » containers,先从 container adaptor 说起

STL 中的 container 应该是最最常用的东西了。 ​ container adapter,也就是包着 container 的 container。有 queue 和 stack (以及 priority_queue) 。

container adapter 里面基本没什么实质性内容,把外界的操作转发给里面的 container。

先来 queue。

include/std/stl_queue.h

  template<typename _Tp, typename _Sequence = deque<_Tp> >
    class queue

02 May 2014 » std::bind 与 placeholders

一直觉得 placeholder 这种设施和奇妙,竟然可以调换参数顺序 = =。

using namespace std;
using namespace std::placeholders

void gao(const string& s, int i) { cout << s << i << endl; }   

int main() {    
    auto f = bind(gao, _2, _1);
    f(1, string("1"));
    return 0; 
}

01 May 2014 » allocator 篇

allocator,一般情况下我们都不会见到或用到。不过大概也清楚,container 们基本都有一个模板参数,比如说 vector 的。

template<
    class T,
    class Allocator = std::allocator<T>
> class vector;

第二个模板参数就是 allocator, 默认是 std::allocator。allocator 是用来分配内存的,也就是在你觉得默认的分配内存方式效率等方面存在问题的时候,你可以自己 customize 一个更好的 allocator。

关于 allocator 更多内的介绍可以 wiki

30 Apr 2014 » std::shared_ptr 与 std::weak_ptr

《三体》想象力真的非常丰富啊~~ 打球归,感觉今天写不了太多了。。。。。

好我们继续。shared_ptr 这么喜闻乐见我觉得就不用废话了,应该是最常用的零部件之一。 shared_ptr 采用引用计数对 object 进行管理,引用计数的硬伤的无法解决循环引用的问题,比如说 A 包含指向 B 的指针,B 包含指向 A 的指针,无论怎样没法在 A B 都失效的时候释放他们两个。 所以有了 weak_ptr ,也就是 A 包含 B 的 shared_ptr, B 包含 A 的 weak_ptr ,weak_ptr 不会“增加引用计数”,不会形成循环应用,不过想使用 weak_ptr 包含的东西时必须将其提升为 shared_ptr。

shared_ptrweak_ptr

libstdc++v3, include/bits/shared_ptr.h

  template<typename _Tp>
    class shared_ptr : public __shared_ptr<_Tp>

第一眼看到这种就没好感,估计又是在外面包的。

29 Apr 2014 » std::tuple,奇妙的模板递归

总算磨磨蹭蹭的看完了挪威的森林。。。。

上次既然提到了 tuple,就顺手。。。。 tuple ​ stdlibc++v3, include/std/tuple