之前一直仿照別人用vector<>,但是一直是仿照著實現功能,然而並不是很清楚它的基礎知識,所以今天好好整理一下,便於以後複習,便於需要的人們檢視!!
vector:
<1>解釋:容器,可以存放各種型別的物件,是乙個動態陣列,存放各種型別的資料;
注意:如果要表示的向量長度較長(需要為向量內部儲存很多數),容易導致記憶體洩漏,而且效率會很低;
<2>方式:
vector----用於存放float型別的資料,這裡是二維點向量,也可以將point2f換成int等其他型別;
vector----用於存放int型別的資料;
vector----用於存放double型別的資料;
vector> points;----表示定義乙個二維陣列,
其中的points[0].size(),表示第一行的列數;
<3>基礎知道:
(1)標頭檔案#include;
(2)建立vector物件,vectorvec;
(3)尾部插入數字:vec.push_back(a);
(4)使用下標訪問元素,cout<
(5)使用迭代器訪問元素:
vector::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<
(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1個元素前面插入a;
(7)刪除元素:
vec.erase(vec.begin()+2);刪除第3個元素
vec.erase(vec.begin()+i,vec.end()+j);刪除區間[i,j-1];區間從0開始
(8)向量大小:vec.size();
(9)清空:vec.clear();
(10)begin()與end()函式表示開始第乙個和最後乙個;
front()與back()表示從前開始和從後開始;
<4>簡單用法:
(1)vecordata;表示建立了乙個vector陣列,int為陣列元素的資料型別,data為動態陣列名;
例如:data.push_back(23);data.push_back(45); ------則:data[0]=23;data[1]=45;
(4)vector作為函式的引數或者返回值時,需要注意其中的「&」絕對不能少:
double distance(vector&a, vector&b) !!!
<5>複雜用法:(注:需要標頭檔案#include)
(1)reverse----將元素翻轉;
reverse(vec.begin(),vec.end());將元素翻轉,即逆序排列!
(2)sort----排序;
sort(vec.begin(),vec.end());(預設是按公升序排列,即從小到大).
可以通過重寫排序比較函式按照降序比較,如下:
bool comp(const int &a,const int &b)//定義排序比較函式:
呼叫時:sort(vec.begin(),vec.end(),comp),這樣就降序排序。
(3)insert()----插入;函式有以下三種用法:
a.在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器
b.在指定位置loc前插入num個值為val的元素
c.在指定位置loc前插入區間[start, end)的所有元素
(4)vector中元素的輸入輸出 :
OpenCV實現Mat與vector互轉
下面是鄙人實現的mat與vector互轉的方法,需要注意的是vector轉mat時,使用reshape 後,必須clone 乙份,否則返回的結果出錯,關於這方面的原因,可以參考鄙人的部落格 include using namespace cv using namespace std mat轉vect...
vector 學習筆記
c 的標頭檔案是 include 沒有.h,而且還有加上命名空間using namespace std 主要演示vector的定義以及使用下標訪問,除了下標訪問,還有迭代器。include include using namespace std void main vectorivec for ve...
vector學習筆記
一 概述 1 集合中的每個物件都有乙個與之對應的索引,索引用於訪問物件。2 使用vector必須包含標頭檔案 include 3 vector能容納絕大多數的物件作為其元素,但是因為引用不是物件,所以不存在包含引用的vector。二 使用 1 定義 vectorivec vector file 2 ...