# STLSourceCodeNote
SGI STL source code analysis and note from ãSTLæºç åæã by 侯æ·
ï¼å
å«çµåä¹¦ãæºç æ³¨éåæµè¯ä»£ç ï¼
1.1 STLæ¦è®º
1.1.1 STLçåå²
1.1.2 STLä¸C++æ åç¨åºåº
1.2 STLå
大ç»ä»¶ åè½ä¸è¿ç¨
1.3 GNUæºä»£ç 弿¾ç²¾ç¥
1.4 HPå®ç°çæ¬
1.5 P.J.Plaugerå®ç°çæ¬
1.6 Rouge Waveå®ç°çæ¬
1.7 STLportå®ç°çæ¬
1.8 SGI STLå®ç°çæ¬
1.8.1 GNU C++headersæä»¶åå¸(æåæ¯æåº)
1.8.2 SGI STLæä»¶åå¸ä¸ç®ä»
1.8.3 SGI STLçç¼è¯å¨ç»æè®¾ç½®(configuration)
1.9 å¯è½ä»¤ä½ å°æçC++ è¯æ³
1.9.1 stl_config.hä¸çåç§ç»æ
1.9.2 临æ¶å¯¹è±¡ç产çä¸è¿ç¨
1.9.3 éæå¸¸éæ´æ°æåå¨classå
é¨ç´æ¥åå§å
1.9.4 incrementï¼decrementï¼dereference æä½ç¬¦
1.9.5 åéåå¼åºé´è¡¨ç¤ºæ³[ )
1.9.6 function callæä½ç¬¦(operator())
2.1 空é´é
ç½®å¨çæ 忥å£
2.1.1 设计ä¸ä¸ªç®åç空é´é
ç½®å¨ï¼JJ::allocator
2.2 å
·å¤æ¬¡é
ç½®å(sub-allocation)çSGI空é´é
ç½®å¨
2.2.1 SGIæ åç空é´é
ç½®å¨ï¼std::allocator
2.2.2 SGIç¹æ®ç空é´é
ç½®å¨ï¼std::alloc
2.2.3 æé åææåºæ¬å·¥å
·ï¼construct()ådestroy()
2.2.4 空é´çé
ç½®ä¸éæ¾ï¼std::alloc
2.2.5 第ä¸çº§é
ç½®å¨ï¼¿malloc_alloc_templateåæ
2.2.6 第äºçº§é
ç½®å¨ï¼¿default_alloc_templateåæ
2.2.7 空é´é
ç½®å½æ°allocate()
2.2.8 空é´éæ¾å½æ°deallocate()
2.2.9 éæ°å
å¡«free lists
2.2.10 å
åæ± (memory pool)
2.3 å
ååºæ¬å¤çå·¥å
·
2.3.1 uninitialized_copy
2.3.2 uninitialized_fill
2.3.3 uninitialized_fill_n
3.1 è¿ä»£å¨è®¾è®¡æç»´ââSTLå
³é®æå¨
3.2 è¿ä»£å¨(iterator)æ¯ä¸ç§smart pointer
3.3 è¿ä»£å¨ç¸åºåå«(associated types)
3.4 Traitsç¼ç¨ææ³ââSTLæºä»£ç é¨é¥
3.4.1 è¿ä»£å¨ç¸åºåå«ä¹ä¸ï¼value_type
3.4.2 è¿ä»£å¨ç¸åºåå«ä¹äºï¼difference_type
3.4.3 è¿ä»£å¨ç¸åºåå«ä¹ä¸ï¼reference_type
3.4.4 è¿ä»£å¨ç¸åºåå«ä¹åï¼pointer_type
3.4.5 è¿ä»£å¨ç¸åºåå«ä¹äºï¼iterator_category
3.5 std::iteratorçä¿è¯
3.6 iteratoræºä»£ç 宿´éå
3.7 SGI STLçç§æ¿èï¼ï¼¿type_traits
4.1 容å¨çæ¦è§ä¸åç±»
4.1.1 åºåå¼å®¹å¨(sequential containers)
4.2 vector
4.2.1 vectoræ¦è¿°
4.2.2 vectorå®ä¹æè¦
4.2.3 vectorçè¿ä»£å¨
4.2.4 vectorçæ°æ®ç»æ
4.2.5 vectorçæé ä¸å
å管çï¼constructorï¼push_back
4.2.6 vectorçå
ç´ æä½ï¼pop_back,eraseï¼clearï¼insert
4.3 list
4.3.1 listæ¦è¿°
4.3.2 listçèç¹(node)
4.3.3 listçè¿ä»£å¨
4.3.4 listçæ°æ®ç»æ
4.3.5 listçæé ä¸å
å管çï¼constructorï¼push_backï¼insert
4.3.6 listçå
ç´ æä½ï¼push_frontï¼push_backï¼eraseï¼pop_frontï¼pop_backï¼clearï¼removeï¼unique,spliceï¼mergeï¼reverseï¼sort
4.4 deque
4.4.1 dequeæ¦è¿°
4.4.2 dequeç䏿§å¨
4.4.3 dequeçè¿ä»£å¨
4.4.4 dequeçæ°æ®ç»æ
4.4.5 dequeçæé ä¸å
å管çctorï¼push_backï¼push_front
4.4.6 dequeçå
ç´ æä½pop_backï¼pop_frontï¼clearï¼eraseï¼insert
4.5 stack
4.5.1 stackæ¦è¿°
4.5.2 stackå®ä¹å®æ´å表
4.5.3 stack没æè¿ä»£å¨
4.5.4 以listä½ä¸ºstackçåºå±å®¹å¨
4.6 queue
4.6.1 queueæ¦è¿°
4.6.2 queueå®ä¹å®æ´å表
4.6.3 queue没æè¿ä»£å¨
4.6.4 以listä½ä¸ºqueueçåºå±å®¹å¨
4.7 heap(éå¼è¡¨è¿°ï¼implicit representation)
4.7.1 heapæ¦è¿°
4.7.2 heapç®æ³
push_heapç®æ³
pop_heapç®æ³
sort_heapç®æ³
make heapç®æ³
4.7.3 heap没æè¿ä»£å¨
4.7.4 heapæµè¯å®ä¾
4.8 priority_queue
4.8.1 priority_queueæ¦è¿°
4.8.2 priority_queueå®ä¹å®æ´å表
4.8.3 priority_queue没æè¿ä»£å¨
4.8.4 priority_queueæµè¯å®ä¾
4.9 slist
4.9.1 slistæ¦è¿°
4.9.2 slistçèç¹
4.9.3 slistçè¿ä»£å¨
4.9.4 slistçæ°æ®ç»æ
4.9.5 slistçå
ç´ æä½
5.1 æ ç导è§
5.1.1 äºåæç´¢æ
5.1.2 平衡äºåæç´¢æ
5.1.3 AVL tree
5.1.4 åæè½¬
5.1.5 åæè½¬
5.2 RBï¼treeï¼çº¢é»æ ï¼
5.2.1 æå
¥èç¹
5.2.2 ä¸ä¸ªç±ä¸èä¸çç¨åº
5.2.3 RBï¼treeçèç¹è®¾è®¡
5.2.4 RBï¼treeçè¿ä»£å¨
5.2.5 RBï¼treeçæ°æ®ç»æ
5.2.6 RBï¼treeçæé ä¸å
å管ç
5.2.7 RBï¼treeçå
ç´ æä½
5.3 set
5.4 map
5.5 multiset
5.6 multimap
5.7 hashtable
5.7.1 hashtableæ¦è¿°
çº¿æ§æ¢æµï¼linear probingï¼
äºæ¬¡æ¢æµï¼quadratic probingï¼
å¼é¾ï¼separate chainingï¼
5.7.2 hashtableçæ¡¶åï¼bucketsï¼ä¸èç¹ï¼nodesï¼
5.7.3 hashtableçè¿ä»£å¨
5.7.4 hashtableçæ°æ®ç»æ
5.7.5 hashtableçæé ä¸å
å管ç
æå
¥æä½ï¼insertï¼ä¸è¡¨æ ¼éæ´ï¼resizeï¼
å¤ç¥å
ç´ çè½èå¤ï¼bkt_numï¼
å¤å¶ï¼copy_fromï¼åæ´ä½å é¤ï¼clearï¼
5.7.6 hashtableè¿ç¨å®ä¾
5.7.7 hash functions
5.8 hash_set
5.9 hash_map
5.10 hash_multiset
5.11 hash_multimap
6.1 ç®æ³æ¦è§
6.1.1 ç®æ³åæä¸å¤æåº¦è¡¨ç¤ºO()
6.1.2 STLç®æ³æ»è§
6.1.3 è´¨åç®æ³mutating algorithmsââ伿¹åæä½å¯¹è±¡ä¹å¼
6.1.4 éè´¨åç®æ³nonmutating algorithmsââ䏿¹åæä½å¯¹è±¡ä¹å¼
6.1.5 STLç®æ³çä¸è¬å½¢å¼
6.2 ç®æ³çæ³åè¿ç¨
6.3 æ°å¼ç®æ³