Vector 迭代器 陣列

2021-08-22 18:01:14 字數 1719 閱讀 4128

標準庫型別vector表示物件的集合,其中所有的物件型別都相同;集合中每個物件都有乙個與之對應的索引,索引用於訪問物件。

vector是乙個類模板,是模板而非型別。

1. 初始化vector物件

vectorv1      t型別空vector,執行預設初始化

vectorv2(v1) v2包含所有v1元素的副本

vectorv2=v1 同上

vectorv3(n,val) v3包含n個val

vectorv4(n) 包含n個重複執行值初始化物件

vectorv5 每個元素賦相應的初始值

vectorv5= 同上(不可以用圓括號)

vectorv(10):v有10個元素每個值都為0

vectorv:v有1個元素,該元素的值為10

vectorv 列表初始化,v有1個元素

vectorv("kk") 錯,不能用字串字面值構建vector物件

vectorv 有10個預設初始化的元素

vectorv 有10個值為"kk"的元素

2. 相關操作

(1)c++標準要求vector能高效快速新增元素,因此既然vector物件能高效增長那麼在定義時指定大小沒什麼意義的,還會使效能更差,除非所有的元素都一樣的時候。

(2)相關操作函式

v.push_back(t)    尾部新增元素

v.empty() 判斷是否為空

v.size() 返回v中元素個數

v[n] 返回第n個位置的引用

v1=v2 拷貝初始化

v1= 用列表元素替換v1

v1==v2 元素數量及對應位置元素是否都相等

>,>=,<,<= 字典序比較

(3)不能用下標形式新增元素,用push_back;下標運算子可用於訪問已存在的元素而不能用於新增元素(string物件也是);

1. 所有標準庫容器都可以使用迭代器;

2. 使用

(1)有迭代器的型別同時擁有返回迭代器的的成員,如這些型別都擁有begin(返回指向第乙個元素的迭代器)、end(返回指向容器(或string物件)尾元素的下乙個位置的迭代器,即不存在的尾後元素)成員;如果容器為空,begin和end均返回尾後迭代器;

*iter        返回iter所指元素的引用

iter->mem 解引用iter並獲取該元素名為mem的成員,等價於(*iter).mem

++iter 指向下乙個元素

== 判斷兩個迭代器是否相等,即指示同乙個元素或他們是同一容器的尾後迭代器;

(2)注意:使用了迭代器的迴圈體,都不要向迭代器所屬的容器新增元素;

1. 陣列的大小確定不變,不能隨意向陣列中增加元素;陣列中的元素的個數也屬於陣列型別的一部分,編譯的時候維度應該是已知的,即維度必須是乙個常量表示式。

2. 注意字元陣列必須有位置存放空字元!

3. 不能將陣列的內容拷貝給其他陣列作為初始值,也不能用陣列給其他陣列賦值。

4. 訪問陣列元素:下標、迭代器

參考:c++ primer

5. 二維陣列:c++ vector之建立二維陣列

vector>vec;//巢狀申明

vector迭代器失效

c 面試題經常會背問到vector和list的區別,其中就有乙個問題就困擾我們的,面試官說vector在進行插入和刪除元素的時候迭代器會失效,list不會,那這邊由我來給大家舉個列子 include include using namespace std int main include inclu...

vector逆向迭代器

include using namespace std include include intmain cout v1 endl vector int v1 簡單理解v.begin 與v.rbegin 的區別 乙個將vector陣列的前面當作頭,乙個將vector陣列的後面當作頭。於是。如果頭指標要...

C STL STL迭代器和vector

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