vector是將元素放在乙個動態陣列中加以管理的容器,vector可以隨機訪問元素(用操作符或at()直接訪問),也支援迭代器訪問元素;vector在尾部新增或移除元素十分高效,但是在中間或者頭部插入/移除元素會比較費時。
vector採用類模板實現,從而實現了演算法和資料型別的分離,因此vector可以存放任何型別的元素(乙個vector裡的元素只能是一種):
vectorintvec; //乙個存放int的vector容器
class tt {};
vectorvectt; //乙個存放tt物件的vector容器
vectorvecttaddr; //乙個存放tt物件位址的vector容器
需要注意,容器元素存放是按值複製的方式進行的,所以tt類必須提高tt的拷貝建構函式,以保證tt物件間拷貝正常。
示例1:
std::vectorintvec;
for (int i = 0; i < 5; ++i)
intvec.front() = 128; //修改頭部資料,front()返回的是頭部元素的引用
intvec.back() = 666; //修改尾部資料,back()返回的是尾部元素的引用
while (intvec.size() > 0)
vector有如下帶參建構函式:
vector(beg, end); //建構函式將[beg, end)區間中的元素拷貝給本身。注意該區間是左閉右開區間
vector(n, elem); //建構函式將n個elem拷貝給本身
vector(const vector& vec); //拷貝建構函式
int arr = ;
std::vectorint_vec1(arr, arr + 5);
std::vectorint_vec2(int_vec1.begin(),int_vec1.end());
std::vectorint_vec3(int_vec1.begin(), int_vec1.begin() + 3);
std::vectorint_vec4(3, 9);
std::vectorint_vec5 = int_vec1;
std::vectorv1(10); //分配10個int的空間,其初始值為0
for (int i = 0; i < 10; ++i)
for (int i = 0; i < 10; ++i)
迭代器是乙個可遍歷stl容器內全部或者部分元素的物件,它如同乙個指標,指出容器中的乙個特定位置。迭代器提供對容器中的物件的訪問方法,並且可以定義了容器中物件的範圍。
示例:
//正序遍歷
for (std::vector::iterator it = v1.begin(); it != v1.end(); ++it)
//逆序遍歷,.rbegin()等價於.end()
for (std::vector::reverse_iterator rit = v1.rbegin(); rit != v1.rend(); ++rit)
迭代器由唯讀/非唯讀、正序/逆序組合如下4種:
typedef __gnu_cxx::__normal_iteratoriterator;
typedef __gnu_cxx::__normal_iteratorconst_iterator;
typedef std::reverse_iteratorconst_reverse_iterator;
typedef std::reverse_iteratorreverse_iterator;
v1.clear(); //移除容器中所有資料
v1.erase(v1.begin(), v1.end()); //刪除[begin(), end())區間的資料,返回下乙個資料的位置
v1.erase(pos); //刪除pos位置的資料,返回下乙個資料的位置
示例:
for (std::vector::iterator it = v1.begin(); it != v1.end(); )
else
}
元素插入:
v1.insert(pos, elem); //在pos位置插入乙個elem元素的拷貝,返回新資料的位置
v1.insert(pos, n, elem); //在pos位置插入n個elem元素的拷貝,無返回值
v1.insert(pos, begin(), end()); //在pos位置插入[begin(), end())區間的資料,無返回值
使用STL的vector容器類
範例程式 include include include include include using namespace std int main char b size 定義vector物件 vectorvf a,a size vectorvc b,b size sizef vf.size siz...
STL典型使用總結 deque類模板
deque即雙端佇列,同樣採用模板類實現,支援在頭部 尾部插入和刪除元素 deque.push back elem 在容器尾部新增乙個元素 deque.push front elem 在容器頭部插入乙個元素 deque.pop back elem 刪除容器最後乙個元素 deque.pop front...
STL之vector的使用
本文 vector是連續記憶體容器,換句話說,標準要求所有標準庫實現的時候,vector中的元素的記憶體必須是連續的。所以對於插入和刪除的時間複雜度是很高的,因為刪除或者插入的時候,需要元素的移動,即元素複製拷貝。vector的內部實現一般需要用到placement new 所以效率很高,因為很多的...