標準庫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 網絡卡要設定為 電源啟動...