1. 概念
Vector可以翻譯為向量,或向量數(shù)組,至于為什么以向量命名,可以理解為一維空間也是存在向量的。
Vector是最簡單的序列是容器,就像數(shù)組一樣,向量使用連續(xù)的存儲位置作為元素,這意味著它們的元素也可以使用常量指向其元素的偏移來訪問,與數(shù)組一樣有效。但與數(shù)組不同,它們的大小可以動態(tài)變化,其存儲由容器自動處理。
總結一下Vector就是一個動態(tài)創(chuàng)建空間,且預先加載了常用的數(shù)組操作的數(shù)組
2. 相關頭文件
頭文件:#include <vector>
3. 初始化
格式為:vector<Data_Types> name;
我們以Int類型作為參數(shù)為例,進行創(chuàng)建。
vector<int> v1; //創(chuàng)建一個空的向量v1 vector<int> v2(10); //創(chuàng)建一個向量v2,其已開辟10個元素的空間,相當于int v[10]; vector<int> v3(10,5); //創(chuàng)建一個向量v3,其已開辟10個元素的空間并全部賦值為5 vector<int> v4(v3.begin(),v3.end()); //創(chuàng)建一個向量v3,其內容為向量v3的內容 vector<int> v5(v4); //創(chuàng)建一個向量v5,其包含了v4的全部內容
4. 迭代器
顧名思義,迭代器是一種安全的訪問控制器,它本身是一種指針,用于直接的元素訪問。其遍歷訪問的大致思路是,創(chuàng)建容器的迭代器,讓迭代器指向第一個元素,逐步向后移動并最終指向最后一個元素結束。
遍歷代碼舉例:
vector<int> v; //創(chuàng)建一個向量vs vector<int>::iterator it; //C98標準 for(it=v.begin();it!=v.end();it++){ cout<<*it<<' '; }
當然,遍歷也可以直接使用下標訪問:
for(int i=0;i<v.size();i++){ cout<<v[i]<<' '; }
請根據(jù)自己的使用習慣進行合理的安排,對于新手而言會更傾向于選擇后者。
5.常用接口(常用的)
Vector的接口有非常多,不同的C++語言標準也不同,這里只提供一些常用的進行簡介,具體的使用可以翻閱官方文檔(英文),或是別人的翻譯稿。
我們使用 vector<int> v; 預先創(chuàng)建了一個向量。
a) 向量尾插入push_back()
在向量的末尾添加一個新元素val,并自動讓容器大小增大一個。
函數(shù)原型:
void push_back (const value_type& val);
使用舉例:
v.push_back(10); //插入一個數(shù)據(jù)10
b) 向量尾刪除pop_back()
移除向量尾的最后一個元素,并且將容器大小減小一個,
函數(shù)原型:void pop_back();
使用舉例:
v.pop_back();
c) 插入insert()
插入元素到指定位置,通過在元素之前在指定位置插入新元素來擴展向量,從而有效地增加容器大小所插入的元素數(shù)量。
函數(shù)原型:
插入單一數(shù)據(jù)到指定位置:
iterator insert (iterator position, const value_type& val);
插入一段數(shù)據(jù)到指定位置:
void insert (iterator position, size_type n, const value_type& val);
插入一段別的容器的數(shù)據(jù)到指定位置:
template <class InputIterator>
void insert (iterator position, InputIterator first, InputIterator last);
使用舉例:
v.insert(v.begin(),10); //在向量最前端插入數(shù)據(jù)10 v.insert(v.begin(),5,20); //在向量最前端插入5個數(shù)據(jù)20 vector<int> k(2,50); //創(chuàng)建一個新的向量k,其擁有2個元素內容均為50 v.insert(v.begin(),k.begin(),k.end()); //在向量v最前端插入向量K的全部內容
d) 刪除erase()
刪除一個元素,或者是一段區(qū)間的元素,將會自動縮減空間使用。
函數(shù)原型:
iterator erase (iterator position);
iterator erase (iterator first, iterator last);
使用舉例
v.erase(v.begin()); //刪除第一個元素 v.erase(v.begin(),v.begin()+4); //刪除從第一個開始后4個元素(包括第一個)
e) 清空clear()
將向量中所有元素清空。
函數(shù)原型:
void clear();
使用舉例:
v.clear(); //清空向量
f) 數(shù)據(jù)大小size()
返回向量中的數(shù)據(jù)元素個數(shù)。
函數(shù)原型:
size_type size() const;
使用舉例:
cout<<v.size()<<endl; //輸出5
g)已開辟最大寬度capacity()
返回向量最大已開辟的空間大小。
函數(shù)原型:
size_type capacity() const;
使用舉例
vector<int> v(3,10); //創(chuàng)建默認有3個值為10的元素的向量v v.insert(v.begin(),10,20); //在向量最前端插入10個值為20的數(shù)據(jù) v.erase(v.begin(),v.begin()+4); //刪除從第一個開始后4個元素(包括第一個) cout<<v.capacity()<<endl; //輸出13
h)*最大支持空間max_size()
返回計算機支持開辟vector的最大空間值,一般來說和計算機內存和CPU相關,是一個極大的數(shù)據(jù),而且不同計算機中可能有不同的值
函數(shù)原型:
size_type max_size() const;
使用舉例:
vector<int> v(5,10); //創(chuàng)建默認有5個值為10的元素的向量v cout<<v.max_size()<<endl; //輸出4611686018427387903
C語言網提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程