最近刷leetcode的时候遇见next permutation这道题,感觉挺有意思的一个题目,递归的方法是较简单并且容易想到的,在网上搜了其余的解法,就是std::next_permutation非递归解法,但是让人不是很舒服的就是关于原理的部分,千篇一律的都是摘抄《STL源码剖析》,也就是这样的...
分类:
其他好文 时间:
2015-09-20 09:10:59
阅读次数:
303
全局的构造和析构函数:
template
inline void _Construct(_T1* __p, const _T2& __value) {
new ((void*) __p) _T1(__value); placement new运算符:在已分配的内存上构造函数对象。opreator new ,new opreator,placement ...
分类:
其他好文 时间:
2015-08-30 17:41:08
阅读次数:
287
迭代器(一种泛型指针类型)是容器和算法的胶合剂。在使用中,经常会使用迭代器相关的类型。
来看迭代器类型萃取机。
文件:stl_iterator_base.h
定义迭代器种类的五种类型,这五种类型不包含任何数据,只是用来作为参数传递给算法,
这时会根据编译器的函数重载来选择最合适的对迭代器的操作,比如,对一个迭代器加上n,
对于forword类型的,只能循环n次,一次加一,而对于random类...
分类:
其他好文 时间:
2015-08-30 15:55:47
阅读次数:
217
STL,标准模板库,无处不存在GP(generic programming泛型编程),有多种实现版本。
GNU C++采用的STL为:SGI STL,源码下载,参考文档。
STL文件讲解一: 针对不同的编译器,定义各种环境常量。选取其中的针对GNU编译器的一部分。
# ifdef __GNUC__
# if __GNUC__ == 2 && __GNUC_MINOR__ <= 7...
分类:
其他好文 时间:
2015-08-28 21:34:17
阅读次数:
237
Stack 简介
stack 是堆栈容器,是一种“先进后出”的容器。
stack 是简单地装饰 deque 容器而成为另外一种容器。
使用 stack 时需要加上头文件
#include 。
stack 实现原理
以某种既有容器作为底部结构,将其接口改变,使之符合“先进后出”的特性,形成一个 stack,是很容易做到的。deque 是双向开口的数据结构...
分类:
其他好文 时间:
2015-08-27 18:49:37
阅读次数:
263
STL中提供了2个计算排列组合关系的算法。分别是next_permucation和prev_permutaion。next_permutation是用来计算下一个(next)字典序排列的组合,而prev_permutation用来计算上一个(prev)字典序的排列组合。
这小节看一下next_permutation...
分类:
其他好文 时间:
2015-08-13 23:40:04
阅读次数:
176
C++的内存配置基本操作是 ::operator new(),内存释放的基本操作是 ::operator delete()。这两个全局函数相当于C的malloc()和free()函数。是的,正是如此,STL正是以malloc()和free()完成内存的配置与释放。
但是考虑到小型区块所可能造成的内存破碎问题,STL中设计了双层级配置器, 第一级配置器直接使用malloc()和free(...
分类:
其他好文 时间:
2015-08-13 16:00:42
阅读次数:
240
??
vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,vector的运用对...
分类:
其他好文 时间:
2015-08-07 13:31:01
阅读次数:
127
本文通过研究STL源码来剖析C++中标准模板块库std::string运行机理,重点研究了其中的引用计数和Copy-On-Write技术。平台:x86_64-redhat-linuxgcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)1. 问题提出最近...
分类:
系统相关 时间:
2015-07-31 17:40:34
阅读次数:
161