序列容器vector和迭代器

2021-09-02 07:27:55 字數 1726 閱讀 1360

一、容器vector

vector類模板提供了一種占用連續記憶體位址的資料結構。這使得它可以高效,直接的利用下標運算子訪問vector中的任一元素,當乙個vecto的記憶體空間耗盡時,它會分配乙個更大的連續空間(陣列),把原先的資料複製(或移動)到新的空間(陣列),並把原來的空間(陣列)釋放。

其中的#0,#1…就是容器內的元素。從上圖可以看出vector維護的是乙個連續的線性空間,和陣列是一樣的。所以不論其元素為何種型別,普通指標就可以作為vector的迭代器!因為vector迭代器所需要的操作如operator*,operator->,operator++,operator+,operator-,operator+=,operator-=,普通指標天生就具備。檢視vector的原始碼,我們可以看到vector的迭代器並沒有另外定義為乙個模版類,而是直接 typedef value_type* iterator。 更可以看出 vector 的迭代器就是乙個普通指標。

實現vector容器的類名為vector,包含類vector的標頭檔案是,並且命名空間為std

二、迭代器iterator

乙個標準化遍歷各類容器裡面的所有物件的方法類(典型的設計模式),把訪問邏輯從不同型別的集合類中抽象出來,從而避免向客戶端暴露集合的內部結構

三、實現的功能

1.建立vector物件

定義了乙個儲存vector型別的物件iterator

typedef iterator> iterator;  //類型別的重定義
用建構函式建立物件

vector()

2.vector物件不等關係的比較

bool operator!=(const iterator& rhs)

3.使用指標輸出陣列

陣列中的指標可視為迭代器,函式begin返回指向陣列第乙個元素的迭代器,函式end返回陣列末端最後一位的迭代器

//返回陣列第乙個元素的迭代器

iterator begin()

//返回陣列末端最後一位的迭代器

iterator end()

4.使用運算子訪問和修改vector元素的下標

char& operator(int index)

5.乙個vector物件用另外乙個vector物件初始化

string(char* pstr) :mpstr(new char[strlen(pstr) + 1]())

6.vector的成員函式 push_back:尾插入元素,如果在已滿的vector插入元素,vevtor會擴容

void push_back(t val)

mdata[cursize++] = val;

}

7.擴容

void resize()

7.vector的成員函式 pop_back:尾刪除元素,若訪問乙個無效的下標或無效的實參,丟擲異常 throw exception

void pop_back()

cursize--;

}

容器vector和迭代器iterator 使用

容器vector宣告方式 vector 型別 變數名 引數 使用前需要引用 incude 初始化方式有下面幾種 1 宣告初始化例如 vectorvct 預設建構函式為空 vectorvct1 vct 用已宣告好容器來初始化 vectorvct2 3,5 大小為3的容器初始化三個都等於5 vector...

Vector容器與iterator迭代器

首先,回顧一下 的用法 是運算子中等級最高的,它分為三種 1 global scope 全域性作用域符 用法 name 2 class scope 類作用域符 用法 class name 3 namespace scope 命名空間 作用域符 用法 namespace name 他們都是左關聯 le...

C STL STL迭代器和vector

include include include includeusing namespace std stl學習 容器和演算法之間通過迭代器連線 迭代器 遍歷的功能,用指標理解 普通指標,也算一種迭代器。vector容器 用普通方法遍歷 void test01 for i i 5 i 用普通指標遍歷...