标题:6行代码 X 2 出处:Felix021 时间:Mon, 01 Jun 2009 13:56:25 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?1624 内容: 1。 class mystack: public stack{ public: int & operator[](unsigned int i){ return c[i]; } }; 很happy,哈哈。 刚刚看 /usr/include/c++/4.3/bits/stl_stack.h 发现原来stack和queue使用的底层容器默认是deque,名字是c, 而且是protected [emot]pig[/emot] @ 2009-06-29 p.s. 其实这是件很挫的事情,STL容器的析构函数不是虚函数,继承自他们的子类的析构函数不会被调用,有可能导致内存泄露。 2。 class t: public deque{ public: void printBufSize(){ std::cout << __deque_buf_size(sizeof(char)) << endl; } }; 看侯捷大神的《STL源码剖析》以及GCC的STL源码后凑出来的这一段代码。调用 printBufSize() 后输出应该是512。 这个要追溯到一周前和sandy的一个小争论。 记得以前看到过deque的底层实现是分多段连续空间的,以达到高效的首尾增删以及可以接受的随机访问效率 输出的这个512就是SGI STL的默认分段大小。 但是sandy却说,所谓的“分段连续”实际上是分成两段 (听起来就觉得不太对头 -__- ) 于是今天特地翻出这本书膜拜一下。当然,不排除其他STL实现使用分两段的可能性,但是这个效率恐怕就不太对劲了。 Generated by Bo-blog 2.1.0