C++vector類

文章目錄
- C++vector類
- 一、vector定義
- 二、容器特性
- 1.順序序列
- 2.動態陣列
- 3.能夠感知記憶體分配器的(Allocator-aware)
- 三、基本成員函式
- 1.建構式
- 2.增加函式
- 3.洗掉函式
- 4.遍歷函式
- 5.大小和容量
- 6.其他函式
- 7.元素訪問
- 四、vector 示例程式
一、vector定義
-
向量(Vector)是一個封裝了動態大小陣列的順序容器(Sequence Container),跟任意其它型別容器一樣,它能夠存放各種型別的物件,可以簡單的認為,向量是一個能夠存放任意型別的動態陣列,
-
vector 是定義于名稱空間 (namespace ) std 內的模板, 其定義在頭檔案 < vector > 中,其原型為:
template < class T, class Allocator = allocator < T >> class vector;
二、容器特性
1.順序序列
順序容器中的元素按照嚴格的線性順序排序,可以通過元素在序列中的位置訪問對應的元素,
2.動態陣列
支持對序列中的任意元素進行快速直接訪問,甚至可以通過指標算述進行該操作,操供了在序列末尾相對快速地添加/洗掉元素的操作,
3.能夠感知記憶體分配器的(Allocator-aware)
容器使用一個記憶體分配器物件來動態地處理它的存盤需求,
三、基本成員函式
1.建構式
-
無引數 - 構造一個空的vector
vector<型別>(); -
數量(num)和值(val) - 構造一個初始放入num個值為val的元素的Vector
vector<型別>( size_type num, const TYPE &val ); -
vector(from) - 構造一個與vector from 相同的vector
vector<型別>( const vector &from ); -
迭代器(start)和迭代器(end) - 構造一個初始值為[start,end)區間元素的Vector(注:半開區間).
vector<型別>( input_iterator start, input_iterator end );
2.增加函式
-
向量尾部增加一個元素X
void push_back(const T& x); -
向量中迭代器指向元素前增加一個元素x
iterator insert(iterator it,const T& x); -
向量中迭代器指向元素前增加n個相同的元素x
iterator insert(iterator it,int n,const T& x); -
向量中迭代器指向元素前插入另一個相同型別向量的[first,last)間的資料
iterator insert(iterator it,const_iterator first,const_iterator last);
3.洗掉函式
-
洗掉向量中迭代器指向元素
iterator erase(iterator it); -
洗掉向量中[first,last)中元素
iterator erase(iterator first,iterator last); -
洗掉向量中最后一個元素
void pop_back(); -
清空向量中所有元素
void clear();
4.遍歷函式
-
回傳向量頭指標,指向第一個元素
iterator begin(); -
回傳向量尾指標,指向向量最后一個元素的下一個位置
iterator end(); -
反向迭代器,指向最后一個元素
reverse_iterator rbegin(); -
反向迭代器,指向第一個元素之前的位置
reverse_iterator rend();
5.大小和容量
-
判斷向量是否為空,若為空,則向量中無元素
bool empty() const; -
回傳向量中元素的個數
int size() const; -
回傳當前向量所能容納的最大元素值
int capacity() const; -
回傳最大可允許的vector元素數量值
int max_size() const; -
resize() 函式改變當前vector的大小為size,且對新創建的元素賦值val
void resize( size_type size, TYPE val ); -
reserve()函式為當前vector預留至少共容納size個元素的空間.
void reserve( size_type size );
6.其他函式
-
交換兩個同型別向量的資料
void swap(vector&); -
設定向量中前n個元素的值為x
void assign(int n,const T& x); -
向量中[first,last)中元素設定成當前向量元素
void assign(const_iterator first,const_iterator last); -
get_allocator() 函式回傳當前vector的記憶體分配器.
allocator_type get_allocator();
7.元素訪問
-
c[index]的回傳值是參考型別,該函式既可以取出元素, 也可以對元素賦值,但必須 確定下標是有效的,
-
回傳pos位置元素的參考
reference at(int pos); -
回傳首元素的參考
reference front(); -
回傳尾元素的參考
reference back();
四、vector 示例程式
-
1.用vector實作二維陣列
#include <iostream> #include <vector> using namespace std; int main() { vector<vector<int>> v(3); //v有3個元素,每個元素都是vector<int> 容器 for (int i = 0; i < v.size(); ++i) for (int j = 0; j < 4; ++j) v[i].push_back(j); for (int i = 0; i < v.size(); ++i) { for (int j = 0; j < v[i].size(); ++j) cout << v[i][j] << " "; cout << endl; } return 0; }程式輸出結果:
0 1 2 3
0 1 2 3
0 1 2 3 -
2.vector 示例程式
#include <iostream> #include <vector> using namespace std; template <class T> void PrintVector(T s, T e) { for (; s != e; ++s) cout << *s << " "; cout << endl; } int main() { int a[5] = {1, 2, 3, 4, 5}; vector<int> v(a, a + 5); //將陣列a的內容放入v cout << "1) " << v.end() - v.begin() << endl; //兩個隨機迭代器可以相減,輸出 1) 5 cout << "2) "; PrintVector(v.begin(), v.end()); //2) 1 2 3 4 5 v.insert(v.begin() + 2, 13); //在begin()+2位置插入 13 cout << "3) "; PrintVector(v.begin(), v.end()); //3) 1 2 13 3 4 5 v.erase(v.begin() + 2); //洗掉位于 begin() + 2的元素 cout << "4) "; PrintVector(v.begin(), v.end()); //4) 1 2 3 4 5 vector<int> v2(4, 100); //v2 有4個元素,都是100 v2.insert(v2.begin(), v.begin() + 1, v.begin() + 3); //將v的一段插入v2開頭 cout << "5) v2: "; PrintVector(v2.begin(), v2.end()); //5) v2: 2 3 100 100 100 100 v.erase(v.begin() + 1, v.begin() + 3); //洗掉 v 上的一個區間,即 2,3 cout << "6) "; PrintVector(v.begin(), v.end()); //6) 1 4 5 return 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/262961.html
標籤:其他
上一篇:IPSec基礎知識
下一篇:Web全堆疊~38.Vue
