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。
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