Posted on 2013-03-09 10:20
盛勝 閱讀(259)
評論(0) 編輯 收藏 引用
標準庫 vector 容器
使用 vector 是必須包含頭文件 <vector>
# include <vector>
vector 是個類模板 可以存放不同的數據類型,包括用戶自定義的類型
聲明格式如下:
class_template_name<type_name> obj_name;
ex:
vector<int> int_vec; //int_vec 對象用來存發整型類的數據
vector 對象的定義和初始化
vector 類的構造函數有如下幾種:
vector<type> v1;
vector<type> v2(v1); 對象v2是v1的副本
vector<type> v3(n, i); v3包含n 個值為i 的元素
vector<type> v4(n); v4包含n個 值初始化 的副本
**值初始化
沒有指定元素的初始化形式,那么標準庫將自行提供一個元素初始化的值
進行 值初始化(value initializationd)具體類型取決于vector存儲的類型。
ex: vector<int> ivec(10); //10 elements, each initialized to 0;
vector 類中成員函數與基本操作
1.判斷容器是否為空,返回值為 bool類型 obj.empty();
2.返回容器中元素的個數 obj.size();
3.在容器末尾增加一個值為 type_value 的元素 obj.push_back(type_value);
4.支持類似于數組的操作
返回容器中位值為n的元素 obj[n]
直接賦值替換 obj1 = obj2;
支持比較操作符 == != < >
** vector的下標操作與數組的不同之處
vector 只能通過對確知的元素進行操作
Ex: vector<int> obj; //obj為空。
obj[0]; //error
標準庫 iterator 迭代器
除了用數組下標去訪問,遍歷容器中的元素,還可以通過使用迭代器(iterator)
iterator 是C++標準庫中用來控制對容器元素的訪問的特定數據類型。有些容器既支持
下標訪問,也可以用 iterator。 迭代器是更加通用的方法。每種容器都對應有不同的迭代器。
每種容器都對應 返回iterator數據成員的操作 begin() 和 end()
ex: //obj is not empty
vector<int>::iterator iter = obj.begin() //用begin()返回迭代器指向容器的第一個元素
end() 返回的是容器的最后一個元素的下一位。當容器為空時,和begin()的返回值相同
obj.end() 起一個哨兵(sentinel)的作用。表示已處理完容器中的所有元素。
** vector的迭代器支持自增和解引用操作
*iter = 0; obj[0] = 0; // obj[0] 和 iter 指的是同一個元素
用迭代器iterator編寫 loop
for( vecotr<int>::iterator iter = int_vec.begin();
iter != int_vec.end(); ++iter ){
*iter = 0; //將容器 int_vec 中所有元素值都置為0。
}
const_iterator
該類型迭代器指向的元素解引用后為 const類型的對象 不能被重寫。
const_iterator 類型與 const 類的 iterator 不同。 前者自身的值可改變,但其所指的值不能改變。
而 后者一旦初始化值就不能改變,不可有自增操作。