GeekBand STL與泛型編程 -- 1

1. 關于模版 -- 見前幾周筆記

注: 關于所說的 兩個 > (尖括號) 之間要有一個空格,否則編譯器會認為是流操作,但是現在編譯器基本上都支持寫在一起了,不必一定要加空格

2. 關于迭代器(iterator)

  1. 迭代器是一個 “可遍歷 STL 容器全部或部分元素” 的對象。迭代器用來表現容器中的一個位置。
  2. 迭代器是容器與算法之間的接口。
  3. 各種迭代器的接口都相同,但是類型各不相同,也就是說,每種容器都有自己的迭代器。

3. 關于容器(containers)

  1. 容器用來管理一大群元素。為了適應不同需要,STL 提供了不同的容器。
stl 容器分類

2 . 關于順序容器

  1. 首先明白這是一種有序集合,其內每個元素均有確鑿的位置 -- 取決于插入實際和地點,與元素值無關。

2. vector -- 基本操作

  1. vector 本身是將元素置于 dynamic array 中加以管理的一個抽象概念,使用之前必須包含頭文件 <vector>.

  2. vector 的 迭代器


    iterator
  3. vector 的能力


    capacity
  4. 元素訪問


    元素訪問
  5. 更易性操作

    操作

    注:關于vector的各種操作,我認為最好的方法就是上一些專業網站直接查詢,上述圖片均來自于http://www.cplusplus.com/reference/vector/vector/

  6. 關于 vector 對象是如何增長的

  7. 為了支持快速隨機訪問,vector 將元素連續存儲,每個元素緊挨著前一個元素;

  8. 容器必須分配新的內存空間來保存已有元素和新元素,將已有元素從舊位置移動到新空間中,然后添加新元素,釋放舊空間。為了避免每添加一個元素就分配一次,標準庫實現者采用了可以減少容器空間重新分配次數的策略。當不得不獲取新的內存空間是,vector 的實現通常會分配比新的空間需求更大的內存空間。


#include <iostream>
#include <vector>

using namespace std ;

int main()
{
    vector <int> vi ; 
    int s, c ;
    
    for(s = vi.size(), c = vi.capacity(); s <= c ; s++)
        vi.push_back(1);
    cout << "空間: " << vi.capacity() << "   元素數: " << vi.size() << endl;
    
    for(s = vi.size(), c = vi.capacity(); s <= c ; s++)
        vi.push_back(1);
    cout << "空間: " << vi.capacity() << "   元素數: " << vi.size() << endl;
    
    for(s = vi.size(), c = vi.capacity(); s <= c ; s++)
        vi.push_back(1);
    cout << "空間: " << vi.capacity() << "   元素數: " << vi.size() << endl;
    
    for(s = vi.size(), c = vi.capacity(); s <= c ; s++)
        vi.push_back(1);
    cout << "空間: " << vi.capacity() << "   元素數: " << vi.size() << endl;
    
    for(s = vi.size(), c = vi.capacity(); s <= c ; s++)
        vi.push_back(1);
    cout << "空間: " << vi.capacity() << "  元素數: " << vi.size() << endl;
    
    return 0;
}
增長

注: 說明在此編譯器下是成倍增長空間的。

2. deque -- 基本操作

  1. 容器deque也采用 dynamic array 來管理元素,提供隨機訪問,并有著和 vector 幾乎一樣的接口, 不同的是,deque 頭尾都開放,因此能在頭尾兩端進行快速安插和刪除。
  2. deque 操作中與 vector 的不同:
 -  deque 不提供容量操作 (capacity() 和 reserve());
 -  deque 直接提供函數完成頭部元素的安插和刪除(push_back() he pop_back()).
  1. 除了at(), 沒有其他函數會檢測是否有效;
  2. deque 操作

iterator 和 capacity

element access 和 modifiers

注: 來源于 http://www.cplusplus.com/reference/deque/deque/?kw=deque

3. list

  1. list使用一個 doubly linked list 管理元素,使用是必須包含<list>;
  2. list對象自身提供兩個 pointer ,用來指向第一個和最末一個元素,每個元素都有pointer指向前一個和下一個元素。如果想要安插新元素,只需操縱對應的 pointer 即可。
  3. list 與 vector 和deque 的不同:
  • . list 不支持隨機訪問;
  • . 任何位置上執行元素的安插和移除都非常快;
  1. list 的操作

操作1

操作2

注:來源于http://www.cplusplus.com/reference/list/list/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容