C++標准庫vector以及迭代器


今天看C++的書,出現了一個新的概念,容器vector以及容器迭代器。

 

vector是同一種對象的集合,每個對象都有一個對應的整數索引值。和string對象一樣,標准庫將負責管理與存儲元素相關的類存。引入頭文件

#include<vector>

1.vector對象的定義和初始化

1 vector<T> v1             vector保存類型為T的對象。默認構造函數,v1為空
2 vector<T> v2(v1)         v2是v1的一個副本
3 vector<T> v3(n,i)        v3包含n個值為i的元素
4 vector<T> v4(n)          v4含有值初始化的元素的n個副本

如果沒有指定元素的初始化式,那么標准庫將自行提供一個元素初始值進行值初始化。這個由庫生成的初始值將用來初始化容器中的每個元素,具體的值為何,取決於存儲在vector中元素的數據類型。

如果vector保存內置類型如int,那么標准庫將用0值創建元素初始化式

vector<int> vv(10);      //10個元素,每個被初始化為0

如果vector保存的是含有構造函數的類類型的元素,標准庫將用該類型的默認的構造函數創建元素的初始化式

vector<string> vvvv(10)      //10個元素,每個被初始化為空字符串

 

還有第三種情況,元素類型可能是沒有定義構造函數的類類型。這種情況下,標准庫仍產生一個帶初始值的對象,這個對象的每個成員進行了值初始化。

2.vector對象的操作

幾種重要的操作

1 v.empty()               如果v為空,則返回true,否則返回false
2 v.size()                返回v中元素的個數
3 v.push_back()           在v的末尾增加一個值為t的元素
4 v[n]                    返回v中位置為n的元素
5 v1=v2                   把v1中的元素替換為v2中元素的副本
6 v1==v2                  如果v1與v2相等,則返回true
7 !=,<,<=,>,>=            保持這些操作符慣有含義

size()返回相應vector類定義的size_type的值。

vector::size_type             //error

vector<int>::size_type    //ok

push_back()函數將新元素添加到vector最后面。

 

3.迭代器簡介

除了使用下標來訪問vector對象的元素外,標准庫還提供了訪問元素的方法:使用迭代器。迭代器是一種檢查容器內元素並且遍歷元素的數據類型。

1.容器的iterator類型

每種容器類型都定義了自己的迭代器類型,如vector:

vector<int> ::iterator iter;變量名為iter。

2.begin和end操作

每種容器都定義了一隊命名為begin和end的函數,用於返回迭代器。如果容器中有元素的話,由begin返回的元素指向第一個元素。

vector<int>::iterator iter=v.begin();

若v不為空,iter指向v[0]。

由end返回的迭代器指向最后一個元素的下一個,不存在,若v為空,begin和end返回的相同。

*iter=0;

iter++即將迭代器向前移動一個位置

即將v[0]賦值為0,由end返回的不允許進行解操作。

==和!=操作符來比較兩個迭代器,若兩個迭代器指向同一個元素,則它們相等,否則不想等。

迭代器使用舉例:

for(vector<int>::iterator iter=v.begin();iter!=v.end();iter++)

    *iter=0;

 

將vector中的元素全部賦值為0;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM