C Vector 使用心得

2021-05-27 13:54:56 字數 4358 閱讀 8886

標準庫vector型別

使用需要的標頭檔案:

#include

vector:vector 是乙個類模板。不是一種資料型別。 vector是一種資料型別。

一、 定義和初始化

vectorv1; //預設建構函式v1為空

vectorv2(v1);//v2是v1的乙個副本

vectorv3(n,i);//v3包含n個值為i的元素

vectorv4(n); //v4含有n個值為0的元素

二、 值初始化

1> 如果沒有指定元素初始化式,標準庫自行提供乙個初始化值進行值初始化。

2> 如果儲存的式含有建構函式的類型別的元素,標準庫使用該型別的建構函式初始化。

3> 如果儲存的式沒有建構函式的類型別的元素,標準庫產生乙個帶初始值的物件,使用這個物件進行值初始化。

三、vector物件最重要的幾種操作

1. v.push_back(t) 在陣列的最後新增乙個值為t的資料

2. v.size() 當前使用資料的大小

3. v.empty() 判斷vector是否為空

4. v[n] 返回v中位置為n的元素

5. v1=v2 把v1的元素替換為v2元素的副本

6. v1==v2 判斷v1與v2是否相等

7. !=、<、<=、>、>= 保持這些操作符慣有含義

vector容器型別

vector容器是乙個模板類,可以存放任何型別的物件(但必須是同一類物件)。vector物件可以在執行時高效地新增元素,並且vector中元素是連續儲存的。

vector的構造

函式原型:

template

explicit vector(); // 預設建構函式,vector物件為空

explicit vector(size_type n, const t& v = t()); // 建立有n個元素的vector物件

vector(const vector& x);

vector(const_iterator first, const_iterator last);

注:vector容器內存放的所有物件都是經過初始化的。如果沒有指定儲存物件的初始值,那麼對於內建型別將用0初始化,對於類型別將呼叫其預設建構函式進行初始化(如果有其它建構函式而沒有預設建構函式,那麼此時

必須提供元素初始值才能放入容器中)。

舉例:

vectorv1; // 建立空容器,其物件型別為string類

vectorv2(10); // 建立有10個具有初始值(即空串)的string類物件的容器

vectorv3(5, "hello"); // 建立有5個值為「hello」的string類物件的容器

vectorv4(v3.begin(), v3.end()); // v4是與v3相同的容器(完全複製)

vector的操作(下面的函式都是成員函式)

bool empty() const; // 如果為容器為空,返回true;否則返回false

size_type max_size() const; // 返回容器能容納的最大元素個數

size_type size() const; // 返回容器中元素個數

size_type capacity() const; // 容器能夠儲存的元素個數,有:capacity() >= size()

void reserve(size_type n); // 確保capacity() >= n

void resize(size_type n, t x = t()); // 確保返回後,有:size() == n;如果之前size()

vector物件的比較(非成員函式)

針對vector物件的比較有六個比較運算子:operator==、operator!=、operator<、operator<=、operator>、operator>=。

其中,對於operator==和operator!=,如果vector物件擁有相同的元素個數,並且對應位置的元素全部相等,則兩個vector物件相等;否則不等。

對於operator<、operator<=、operator>、operator>=,採用字典排序策略比較。

注:其實只需要實現operator==和operator!=就可以了,其它可以根據這兩個實現。因為,operator!= (lhs, rhs) 就是 !(lhs == rhs),operator<=(lhs, rhs) 就是 !(rhs < lhs),operator>(lhs, rhs) 就是 (rhs < lhs),

operator>=(lhs, rhs) 就是 !(lhs, rhs)。

vector類的迭代器

vector類的迭代器除了支援通用的字首自增運算子外,還支援算術運算:it + n、it - n、it2 - it1。注意it2 - it1返回值為difference_type(signed型別)。

注意,任何改變容器大小的操作都可能造成以前的迭代器失效。

應用示例

#include #include #include using namespace std;

int main()

程式說明:上面程式中用了三個迴圈輸出容器中的元素,每個迴圈的遍歷方式是不一樣的。特別需要說明的是,第二個迴圈在條件判斷中使用了size() 函式,而不是在迴圈之前先儲存在變數中再使用。之所以這樣做,有兩個

原因:其一,如果將來在修改程式時,在迴圈中修改了容器元素個數,這個迴圈仍然能很好地工作,而如果先儲存size()函式值就不正確了;其二,由於這些小函式(其實現只需要一條返回語句)基本上都被宣告為inline,所

以不需要考慮效率問題。

---------------------------------

c++程式語言中有一種叫做vector的應用方法,它的作用在實際程式設計中是非常重要的。在這裡我們將會為大家詳細介紹一下c++ vector的相關應用技巧及基本內容,希望能給大家帶來一些幫助。

(1)vector< 型別 > 識別符號 ;

(2)vector< 型別 > 識別符號(最大容量) ;

(3)vector< 型別 > 識別符號(最大容量,初始所有值);

(4) int i[4] = ;

vector< 型別 > vi(i , i+2); //得到i索引值為3以後的值 ;

(5)vector< vector> //vi 定義2維的容器;記得一定要有空格,不然會報錯

vector< int > line

// 在使用的時候一定要首先將vi個行進行初始化;

for(int i = 0 ; i < 10 ; i ++)

/// 個人認為使用vector定義二維陣列很好,

因為是長度可以不預先確定。很好。

(6)c++ vector排序

vector< int > vi ;

vi.push_back(1);

vi.push_back(3);

vi.push_back(0);

sort(vi.begin() , vi.end()); /// /小到大

reverse(vi.begin(),vi.end()) /// 從大道小

(7)順序訪問

vector < int > vi ;

for( int i = 0 ; i < 10 ; i ++)

for(int i = 0 ; i < 10 ; i ++) /// 第一種呼叫方法

(8)尋找

vector < int > vi ;

for( int i = 0 ; i < 10 ; i ++)

vector < int >::interator it = find(vi.begin() , vi.end,3) ;

cout << *it << endl ; ///返回容器內找到值的位置。

(9)使用陣列對c++ vector進行初始化

int i[10] = ;

///第一種

vectorvi(i+1,i+3); ///從第2個元素到第三個元素

for(vector ::interator it = vi.begin() ;

it != vi.end() ; it++)

(10) 結構體型別

struct temp

tmpint main()

{vector t ;

temp w1 ;

w1.str = "hellowor" ;

w1.id = 1 ;

t.push_back(t1);

cout << w1.str << "," <

frameset 使用心得

欲明白本篇 html徹底剖析 之標記分類,請看 標記一覽 也請先明白圍堵標記與空標記的分別,請看 html概念 框架概念 謂框架便是網頁畫面分成幾個框窗,同時取得多個 url。只需要 即可,面所有框架標記需要放在乙個總起的 html 檔,這個檔案只記錄了該框架如何分割 不會顯示任何資料,所以不必放入...

Access使用心得

今天臨時用access做資料庫,長期用sql server開發習慣了,總結一下現在為止用到的比較大的差異,以後有新的再補了 1 返回字串長度 len s lenb s 前者返回字元數,後者返回位元組數,並且access中text型別字元統一為2位元組,與sql2000不同。2 join的使用 acc...

vmware使用心得

成功在winxp環境中安裝了vista business版本,反之,亦然。可以建立工作組網路連線了,虛擬機器也可以訪問網際網路了。安裝說明 在安裝嚮導中,無論使用哪種網路連線形式,都不影響正確安裝。安裝後,可以編輯本地機和虛擬機器之間的網路連線形式。需要注意三個細節問題 1 網絡卡要設定為 電源啟動...