(
c++中的標準模板庫(stl, standard template library)有三個主要組成部分:容器、迭代器、演算法
而stl容器可以分為三類:順序容器、關聯容器、容器介面卡
順序容器又有三種預定義的容器:向量(vector)、雙端佇列(deque)、表(list)
向量:
訪問向量中的元素。在陣列中間或是開始處插入乙個元素是費時的,特別是在陣列非常大的時候更是如此。然而在陣列末端插入元素卻很快。實現向量容器的類名是vector(容器是類模板)。包含vector類的頭檔名是vector。所以,如果要在程式裡使用向量容器,就要在程式中包含下面語句:#include 此外,在定義向量型別物件時,必須指定該物件的型別,因為vector類是乙個類模板。例如,語句:vectorintlist-----將intlist宣告為乙個元素型別為int的向量容器物件。
類似地,語句:vectorstringlist-----將stringlist宣告為乙個元素型別為string的向量容器物件。
宣告向量物件: vector類包含了多個建構函式,其中包括預設建構函式。因此,可以通過多種方式來
明和初始化向量容器。表一描述了怎樣宣告和初始化指定型別的向量容器。
表一 各種宣告和初始向量容器的方法:
語句-----作用
1).vectorveclist;-----建立乙個沒有任何元素的空向量veclist(使用預設建構函式)
2).vectorveclist(otherveclist)----建立乙個向量veclist,並使用向量otherveclist中的元素初始化該向量。向量veclist與向量otherveclist的型別相同
3).vectorveclist(size)----建立乙個大小為size的向量veclist,並使用預設建構函式初始化該向量
4).vectorveclist(n,elem)----建立乙個大小為n的向量veclist,該向量中所有的n個元素都初始化為elem
5).vectorveclist(begin,end)----建立乙個向量veclist,並初始化該向量(begin,end)中的元素。即,從begin到end-1之間的所有元素
在介紹了如何宣告向量順序容器之後,讓我們開始討論如何操作向量容器中的資料。首先,必須要知道下面幾種基本操作:
元素插入、元素刪除、遍歷向量容器中的元素
假設veclist是乙個向量型別容器。表二給出了在veclist中插入元素和刪除元素的操作,這些操作是vector類的成員函式。表二還說明了如何使用這些操作。
表二 向量容器上的各種操作
語句 ----作用
1). veclist.clear()----從容器中刪除所有元素
2). veclist.erase(position)----刪除由position指定的位置上的元素
3). veclist.erase(beg,end)----刪除從beg到end-1之間的所有元素
4). veclist.insert(position, elem)----將elem的乙個拷貝插入到由position指定的位置上,並返回新元素的位置
5). veclist.insert(position, n, elem)----將elem的n個拷貝插入到由 position指定的位置上
6). veclist.insert(position, beg, end)----將從beg到end-1之間的所有元素的拷貝插入到veclist中由position指定的位置上
7). veclist.push_back(elem)----將elem的乙個拷貝插入致list的末尾
8). veclist.pop_back()----刪除最後元素
9). veclist.resize(num)----將元素個數改為num。如果size()增加,預設的建構函式負責建立這些新元素
10). veclist.resize(num, elem)----將元素個數改為num。如果size()增加,預設的建構函式將這些新元素初始化為elem
在向量容器中宣告迭代器 vector類包含了乙個typedef iterator,這是乙個public成員。通過iterator,可以宣告向
容器中的迭代器。
例如,語句:vector::iterator intveciter----將intveciter宣告為int型別的向量容器迭代器。因為iterator是乙個定義在vector類中的typedef,所以必須使用容器名(vector)、容器元素型別和作用域符來使用iterator。
表示式:++intveciter----將迭代器intveciter加1,使其指向容器中的下乙個元素。
表示式:*intveciter----返回當前迭代器位置上的元素。注意,迭代器上的這些操作和指標上的相應操作是相同的。運算子*作為單目運算子使用時,稱為遞引用運算子。
下面將討論如何使用迭代器來操作向量容器中的資料。假設有下面語句: vectorintlist; vector::iterator intveciter; 第一行中的語句將intlist宣告為元素為int型別的向量容器。
第二行中的語句將intveciter宣告為元素為int型別的向量容器的迭代器。
容器與函式begin和end 所有容器都包含成員函式begin和end。函式begin返回容器中第乙個元素的位置;函式end返回容器中最後乙個元素的位置。這兩個函式都沒有引數。在執行下面語句: intveciter = intlist.begin(); 迭代器intveciter指向容器intlist中第乙個元素。下面的for迴圈將intlist中所有元素輸出互標準輸出裝置上: for (intveciter = intlist.begin(); intveciter != intlist.end(); cout<<*intveclist<<" "; 可以通過表三中給出的操作直接訪問向量容器中的元素。
表三 訪問向量容器中元素的操作
表示式-----作用
1). veclist.at(index)----返回由index指定的位置上的元素
2). veclist[index]----返回由index指定的位置上的元素
3). veclist.front()----返回第乙個元素 (不檢查容器是否為空)
4). veclist.back()----返回最後乙個元素(不檢查容器是否為空)
表三說明:可以按照陣列的方式來處理向量中的元素(注意,在c++中,陣列下標從0始。,向量容器中第乙個元素的位置也是0)。徽號類中還包含:返回容器中當前元素個數的成員函式,返回可以插入到容器中的元素的最大個數的成員函式等。表四描述其中一些操作(假設veccont是向量容器)。
表四 計算向量容器大小的操作
表示式----作用
1). veccont.capacity()----返回不重新分配空間可以插入到容器veccont中的元素的最大個數
2). veccont.empty()----容器veccont為空,返回true;否則,返回false
3). veccont.size()----返回容器veccont中當前的個數
4). veccont.max_size()----返回可以插入到容器veccont中的元素的最大個數
下面給出乙個樣本程式供進一步認識這些函式的用法:
#include
#include
using namespace std;
int main()
{vectorintlist;
int i;
intlist.push_back(13);
intlist.push_back(75);
intlist.push_back(28);
intlist.push_back(35);
cout<<"line 1: list elements: ";
for(i=0;i<4;i++)cout<::iterator listit;
cout<<"line 30:list elements: ";
for(listit=intlist.begin();listit != intlist.end();++listit)cout<<*lintit<<" ";
cout<
C 中的向量
c 中的標準模板庫 stl,standard template library 有三個主要組成部分 容器 迭代器 演算法 而stl容器可以分為三類 順序容器 關聯容器 容器介面卡 順序容器又有三種預定義的容器 向量 vector 雙端佇列 deque 表 list 向量 訪問向量中的元素。在陣列中間...
c 中 的向量vector
cpp view plain copy print?include include include include 使用向量 就包含向量的標頭檔案 include include using namespace std intmain typedef vector double size type ...
C 中vector向量的基本操作
vector向量是一種簡單高效的容器,具有自動記憶體管理功能。對於大小為n的vector容器,它的元素下標是0 n 1。vector有二個重要方法 begin 返回首元素位置的迭代器。end 返回最後乙個元素的下乙個元素位置的迭代器。1 vector物件建立的幾種方式。1 不指定容器元素個數。vec...