Vector功能
1.Vector是一個在C++標准模板庫中的部分內容,它是一個多功能的,能夠操作多種數據結構和算法的模板類和函數庫。
2.是一個能夠存放任意類型的動態數組。
3.Vector是動態空間,隨着元素的加入,它的內部機制會自行擴充空間以容納新元素。
4.向量長度較長時效率比較低。
序列式容器:Vector,Deque,List
Vector:將元素置於一個動態數組中加以管理,可以隨機存取元素(用索引直接存取),數組尾部添加或移除元素非常快速。但是在中部或頭部安插元素比較費時;
Deque:是“double-ended queue”的縮寫,可以隨機存取元素(用索引直接存取),數組頭部和尾部添加或移除元素都非常快速。但是在中部或頭部安插元素比較費時;
List:雙向鏈表,不提供隨機存取(按順序走到需存取的元素,O(n)),在任何位置上執行插入或刪除動作都非常迅速,內部只需調整一下指針;
基本函數實現
1.構造函數
- vector():創建一個空vector
- vector(int nSize):創建一個vector,元素個數為nSize
- vector(int nSize,const t& t):創建一個vector,元素個數為nSize,且值均為t
- vector(const vector&):復制構造函數
- vector(begin,end):復制[begin,end)區間內另一個數組的元素到vector中
2.增加函數
- void push_back(const T& x):向量尾部增加一個元素X
- iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一個元素x
- iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n個相同的元素x
- iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一個相同類型向量的[first,last)間的數據
3.刪除函數
- iterator erase(iterator it):刪除向量中迭代器指向元素
- iterator erase(iterator first,iterator last):刪除向量中[first,last)中元素
- void pop_back():刪除向量中最后一個元素
- void clear():清空向量中所有元素
4.遍歷函數
- reference at(int pos):返回pos位置元素的引用
- reference front():返回首元素的引用
- reference back():返回尾元素的引用
- iterator begin():返回向量頭指針,指向第一個元素
- iterator end():返回向量尾指針,指向向量最后一個元素的下一個位置
- reverse_iterator rbegin():反向迭代器,指向最后一個元素
- reverse_iterator rend():反向迭代器,指向第一個元素之前的位置
5.判斷函數
- bool empty() const:判斷向量是否為空,若為空,則向量中無元素
6.大小函數
- int size() const:返回向量中元素的個數
- int capacity() const:返回當前向量張紅所能容納的最大元素值
- int max_size() const:返回最大可允許的vector元素數量值
7.其他函數
- void swap(vector&):交換兩個同類型向量的數據
- void assign(int n,const T& x):設置向量中第n個元素的值為x
- void assign(const_iterator first,const_iterator last):向量中[first,last)中元素設置成當前向量元素
1.push_back 在數組的最后添加一個數據
2.pop_back 去掉數組的最后一個數據
3.at 得到編號位置的數據
4.begin 得到數組頭的指針
5.end 得到數組的最后一個單元+1的指針
6.front 得到數組頭的引用
7.back 得到數組的最后一個單元的引用
8.max_size 得到vector最大可以是多大
9.capacity 當前vector分配的大小
10.size 當前使用數據的大小
11.resize 改變當前使用數據的大小,如果它比當前使用的大,者填充默認值
12.reserve 改變當前vecotr所分配空間的大小
13.erase 刪除指針指向的數據項
14.clear 清空當前的vector
15.rbegin 將vector反轉后的開始指針返回(其實就是原來的end-1)
16.rend 將vector反轉構的結束指針返回(其實就是原來的begin-1)
17.empty 判斷vector是否為空
18.swap 與另一個vector交換數據
應用實例
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; bool compare(int a, int b) { return a > b;//升序序列,如果改為a>b,則是降序序列 } void main() { vector<int> obj;// for (int i = 0; i < 5; i++) { obj.push_back(i);//在向量末尾添加數據 cout << obj[i] << ","; } cout <<"容器容量為:"<< obj.size() << endl; obj.pop_back();//去掉最后一個元素 cout << "去掉最后一個元素之后容器容量為:" << obj.size() << endl; obj.clear();//清除容器中的數據 cout << "清除之后容器容量為:" << obj.size() << endl; obj.push_back(9); obj.push_back(6); obj.push_back(88); obj.push_back(192); obj.push_back(413); //排序使用sort(int start,int end)方法需要添加#include <algorithm>頭文件 //從小到大排序 sort(obj.begin(),obj.end()); cout << "從小到大排序:" << endl; for (int i = 0; i < 5; i++) { cout << obj[i] << ","; } cout << "\n"; //從大到小排序 reverse(obj.begin(), obj.end()); cout << "從大到小排序:" << endl; for (int i = 0; i < 5; i++) { cout << obj[i] << ","; } cout << "\n"; //重寫sort方法 int a[10] = {1,8,6,9,413,722,816,0,2,10}; sort(a, a + 10, compare); cout << "重寫sort之后從大到小排序為:"<< endl; for (int i = 0; i < 10; i++) { cout << a[i] << ","; } cout << "\n"; system("pause"); }
運行結果
0,1,2,3,4,容器容量為:5 去掉最后一個元素之后容器容量為:4 清除之后容器容量為:0 從小到大排序: 6,9,88,192,413, 從大到小排序: 413,192,88,9,6, 重寫sort之后從大到小排序為: 816,722,413,10,9,8,6,2,1,0,
二維數組
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; void main() { vector<vector<int> > obj(6, vector<int>(6)); //定義二維動態數組6行6列 for (int i = 0; i< obj.size(); i++)//輸出二維動態數組 { cout << "第" << i << "行元素為:" << endl; for (int j = 0; j<obj[i].size(); j++) { cout << obj[i][j] << " "; } cout << "\n"; } system("pause"); }
運行結果
第0行元素為: 0 0 0 0 0 0 第1行元素為: 0 0 0 0 0 0 第2行元素為: 0 0 0 0 0 0 第3行元素為: 0 0 0 0 0 0 第4行元素為: 0 0 0 0 0 0 第5行元素為: 0 0 0 0 0 0