STL-ソース解析、簡単な要約

STL 6つの成分の機能とアプリケーション

1. 容器

さまざまなデータ構造、ベクトル、リスト、両端キュー、セット 、マップ、 実装の観点から、STLコンテナであるクラステンプレート

2.アルゴリズム

一般的に使用されるアルゴリズムは、ソート、検索、コピーのバラエティ、消去 、 実装の観点から、STLコンテナがある関数テンプレート

3.イテレータ

コンテナとアルゴリズムとの間の接着剤、果たしている汎用ポインタ >クラステンプレートをオーバーロードする、opreator ++、opreator-ポインタおよび他の関連する操作、各- 、実装の観点から、5つのタイプが存在する、演算子*、演算子でありますSTLコンテナは、独自の専用イテレータに同梱されています。また、主要なポインタイテレータです。

4.数子

ファンクタとは何ですか?
行動同様の機能。この文では良い経験

アダプタ(アダプタ)

名前が示すように、モードアダプタ(アダプタ設計)を考えます

前記コンフィギュレータ(アロケータ)

ダイナミックなスペース割り当て、スペース管理を達成するために、スペースの割り当てと管理を担当し、スペースが解放されます。


宇宙コンフィギュレータ(アロケータ)

ここに画像を挿入説明ここに画像を挿入説明
SGIは、設計された、二重レベルの設定が主原因である可能性があり壊れた小さなメモリブロックの問題を解決するために、(面接が求められます)。
SGI第一段構成mallocとfreeは構成やメモリの解放を完了します。第二段階は、異なる戦略により動作するように構成されている:第一に、それはの128バイトを超えたかどうかを確認するために、配置領域の大きさを見て、タイルを使用して、以下の128バイトである場合、それは第一段構成、構成に、あるメモリプールの道を終えました。
だから、このパラメータが定義されている__USE_MALLOCかどうかに応じて、それを使用すると同時に、OK、またはその両方で唯一の第一段階は何ですか。(侯傑の先生は、ここで注意:このパラメータの名前が呼ばれることがあるため、常にmallocのいずれかの場合には、理想的ではないことを、右)。図は、特定のプロセスを見て。
ここに画像を挿入説明


コンフィギュレータの下方に配置された第一段階と第二段階ずつ説明

第一段階コンフィギュレータ

Cに似た実装メカニズム++彼はメモリ使用量のオペレータが新しい設定されなかったため、新しいハンドラが直接、このメカニズムを使用することはできません。

需要を満たすことができないときに新しいハンドラメカニズム、それが何であるか、あなたが指定した実行、あなたのシステムを作ることができ、メモリ構成が解決しないときは、他の言葉で、指定された関数を呼び出して、システムメモリの設定を依頼することができます機能。

::スローのstd :: bad_alloc異常状態の前にタスクを満たしていないnew演算子は、最初のクライアントが指定したルーチンを処理している呼び出す必要がありますが、この処理ルーチンは、多くの場合、新しいハンドラと呼ばれています。

侯先生は、ここではいくつかのより多くを求めて:そのデザインと「処理ルーチンメモリ不足」に設定し、クライアントの責任である、特定のルーチンがあります

第二级配置器:
小于128bytes时,以内存池管理(memory pool),该方法又称为(sub-allocation);每次配置一大块内存,并维护对应之自由链表(free-list)。
有16个free-lists,各自管理不同大小的小额区块,例如8,16,32,
每次配置一大块内存,并维护对应的free list,若下次还是相同大小的内存需求,直接从free-list中拨出。

  1. allocate()函数 ,该函数,首先判断区块大小,大于128,嗯,你懂得,小于的话,就看对应的free-list。如果free-list 内有能用的区块,就直接拿来用,没有的话,将区块上调至8倍数边界,然后调用refill()函数,准备为free-list重新填充空间。
  2. dellocate()函数,同样的,首先判断区块大小,大于128,小于128,就找到对应的free-list ,将区块回收。
  3. chunk_alloc() 函数,从内存池中取空间给free-list,首先会判断水量够不够,够的话,就取出20个区块给free-list,不够20个区块,还可以供应一个以上的话,就把这些区块拨出去,问题来了,假如一个都不够的话,该怎么办,对客户端显然无法交代,对不对,通过malloc()从heap中配置内存,为池子里注入新的水以供使用。新水量为需求的两倍,再加上一个随着配置次数增加而越来越大的附加量。
    ここに画像を挿入説明ここに画像を挿入説明
    ここに画像を挿入説明

内存池(面试题)


迭代器(iterators)概念与traits编程技法

STL 的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再以一贴胶水将两者联系在一起。

迭代器是一种smart pointer

序列式容器

vector

vector 与array 的区别是什么呢?
array 是静态空间,一旦配置了就不能改变,vector是动态空间。vector数据空间是连续线性空间,为了降低空间配置是的速度成本,vector实际配置的大小可能比客户端需求量更大一些。

vector 动态增加大小,并不是在原来的空间之后接续新空间(因为无法保证原始空间后面是不是还有可以分配的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原始空间。

vector 为单向数组,只能pushback 和pop back
ここに画像を挿入説明

腾讯面试题:通过三个迭代器:start,finish,end_of_storage 完成内存分配。


list

list 有个一个prev 和next ,所以为双向链表,而且还是环装双向链表


deque

deque是一个双向开口的连续线性空间。可以在头尾两端分别做元素的插入和删除操作。

deque 的 迭代器的比较复杂相比于vector
因此,除非必要,我们应尽可能选择使用vector,而非deque,例如,对deuqe进行排序操作,为了高效,可以将deque先完整复制到一个vector,将vector排序后(利用STL sort 算法),在复制回deque。

deque 数据结构 采用所谓map 作为主控,map是一小块连续空间,其中每个元素(此处叫node,节点)都是指针,指向另一段(较大的)连续线性空间,称为缓冲区。缓冲区才是deque 的存储空间主体。我们可以指定缓冲区的大小。默认为512bytes。

ここに画像を挿入説明


stack

以某种既有容器作为底部结构,将其接口改变,让其满足“先进后出”的特性,形成一个stack,是很容易做到的。

ここに画像を挿入説明

キュー

ここに画像を挿入説明

ヒープ

ここに画像を挿入説明

PRIORITY_QUEUE

ここに画像を挿入説明

SLIST

単独リンクリスト

連想コンテナ

RB-ツリー

ここに画像を挿入説明


セット

基礎となるデータ構造は、RB-木であります

フェイス連想コンテナは、彼らがより効率的に提供する要素を検索するための検索機能を使用する必要があります

itel = iset.find(3);          //查找3这个元素 而不是用find(first,last,value) 

地図

RB-ツリーツリーは、基礎となる<キー、値>であります

マルチセット&マルチマップ

多重集合と使用特性と同じセット、唯一の違いは、重複キー、マップおよびマルチマップが真であることができるということです

hash_set&hash_map&hash_multiset&hash_multimap

すべてのハッシュテーブルを根底

アルゴリズム

int a[] = {0,1,2,3,4,5,6,6,6,7,8}


for_each(begin(),end(),display<int>());  // 可以用来打印  
adjacet_find(begin(),end());// 找到相邻元素值相等的第一个元素 ,这里为6
adjacet_find(begin(),end(),equal_to<int>());// 找到相邻元素值相等的第一个元素 ,这里为6
count(begin(),end(),6) ;// 数组中值为6的个数
count_if(begin(),end(),bind2nd(less<int>()),7); // 找出小于7的元素个数 
find_if(begin(),end(),bind2nd(greater<int>()),2)// 找出第一个大于2的元素的位置

注意:次の日は、私はタグにここになります場合は、使用されるアルゴリズムを書きます

ファンクタ(別の名前の関数オブジェクト関数オブジェクト)

//用户继承 binary_function,便可以取得该仿函数的各种相应的类型
eg:
template<class T>
struct plus :public binary_function<T,T,T>{
    T  opreator()(const T& x,const T& y) const {return x+y}
}

アダプタ

おすすめ

転載: blog.csdn.net/shaoye_csdn1/article/details/90481312