C++ STL與泛型程式設計-第一篇 (Boolan)

weixin_34292287發表於2017-03-02

C++ STL與泛型程式設計-第一篇 (Boolan)

本章內容:
1 C++ Standard Library vs. Standard Template Library
2 C++的幾個重要網頁
3 STL相關基礎知識
3.1 STL六大部件
3.2 STL六大部件關係
3.3 容器-結構與分類
4 容器使用示例
5 分配器使用示例


1 C++ Standard Library vs. Standard Template Library

  • C++ Standard Library -- C++標準庫
  • Standard Template Library -- STL,標準模板庫
    標準庫以header files形式呈現:
  • C++標準庫的header files不帶字尾名(.h),例如#include <vector>
  • 新式C header files不帶字尾名.h,例如#include <cstdio>
  • 舊式C header files(帶字尾名.h)仍然可用,例如#include <stdio.h>
  • 新式headers內的元件封裝於namespace std,用法如下:
    1). using namespace std;
    2). using std::cout;
  • 舊式headers內的元件不封裝於namespace std
    標頭檔案使用示例:
    #include <string>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <functional>
    using namespace std;

2 C++的幾個重要網頁

1). www.cplusplus.com
2). en.cppreference.com
3). gcc.gnu.org

3 STL相關基礎知識

3.1 STL六大部件

  • 容器(Containers)
  • 分配器(Allocators)
  • 演算法(Algorithms)
  • 迭代器(Interators)
  • 介面卡(Adapters)
  • 仿函式(Functors)

3.2 STL六大部件關係

  • 六大部件之間的關係如下圖所示:


    4614591-1750e77ec4ca5e34.png
    六大部件關係圖
  • 六大部件程式碼呼叫示例:


    4614591-14707df7ab5ff28b.png
    程式碼呼叫示例

3.3 容器-結構與分類

  • STL中容器結構分成如下幾種:


    4614591-f3fcf151445152ec.png
    結構分類

4 容器使用示例

  • 公共函式部分如下所示:


    4614591-9309643856297ed5.png
    公共函式

4.1 使用容器array

4614591-e43547fc3a98d3cb.png
array容器結構
  • array容器的相關測試程式碼和結果如下:


    4614591-1c99a2fbbe51dc1b.png
    array測試程式碼和結果

4.2 使用容器vector

4614591-606cc3927549fbde.png
vector容器結構
  • vector容器的相關測試程式碼和結果如下:


    4614591-dc8562ce527bc1ff.png
    vector測試程式碼

    4614591-cb25bbf9f902aa7b.png
    vector測試程式碼和結果

4.3 使用容器list

4614591-29ca00f7707691b4.png
list容器結構
  • list容器的相關測試程式碼和結果如下:


    4614591-b0bf0cde9971b02b.png
    list測試程式碼和結果

4.4 使用容器forward_list

4614591-6b8e4388e6331135.png
forward_list結構
  • forward_list容器的相關測試程式碼和結果如下:


    4614591-0fc5b94ece58e138.png
    forward_list測試程式碼和結果

4.5 使用容器deque

4614591-4b49669175022a89.png
deque結構
  • 容器deque的記憶體結構如下圖所示:


    4614591-1cbe3fc7f0ae59cd.png
    deque記憶體結構
  • deque容器的相關測試程式碼和結果如下:


    4614591-adeaa37c4072cc6e.png
    deque測試程式碼和結果

4.6 使用容器stack

4614591-aedd67dda6e37fb2.png
stack結構
  • stack容器的相關測試程式碼和結果如下:


    4614591-ba6dbac79eab6b46.png
    stack測試程式碼和結果

4.7 使用容器queue

4614591-ef185bc788ddd7ea.png
queue結構
  • queue容器的相關測試程式碼和結果如下:


    4614591-714d75f6ebe0e951.png
    queue測試程式碼和結果

4.8 使用容器multiset

4614591-59f070b357169a1d.png
multiset結構
  • multiset容器的相關測試程式碼和結果如下:


    4614591-79a5d16e1781ac19.png
    multiset測試程式碼和結果

4.9 使用容器multimap

4614591-318bae0b21f94c76.png
multimap結構
  • multimap容器的相關測試程式碼和結果如下:


    4614591-8e457eab7a9200d0.png
    multimap測試程式碼和結果

4.10 使用容器unordered_multiset

4614591-28fcfc3b0b0c8e97.png
unordered_multiset結構

4.11 使用容器unordered_multimap

4614591-d7e6dde2dea07562.png
unordered_multimap結構
  • unordered_multimap容器的相關測試程式碼和結果如下:


    4614591-a398c9a6035c7091.png
    unordered_multimap測試程式碼和結果

4.12 使用容器set

4614591-6ca21b5be276d320.png
set結構
  • set容器的相關測試程式碼和結果如下:


    4614591-55b9c3fa241ec6ac.png
    set測試程式碼和結果

4.13 使用容器map

4614591-69833c0889d79bf1.png
map結構
  • map容器的相關測試程式碼和結果如下:


    4614591-b756dfb4cf5ef236.png
    map測試程式碼和結果

5 分配器使用示例

  • 分配器的使用如下圖所示:


    4614591-8daa36d6865c628d.png
    allocator
  • STL分配器allocator有如下幾種:

    1. array_allocator
    2. mt_allocator
    3. debug_allocator
    4. pool_allocator
    5. bitmap_allocator
    6. malloc_allocator
    7. new_allocator
  • 分配器的結構和使用示例如下圖所示:


    4614591-acd8bbaa763e945f.png
    分配器的結構和使用
  • 分配器的測試程式碼如下圖所示:


    4614591-e41f596f6fde8c65.png
    分配器的測試程式碼

相關文章