opencv學習 vector的基礎知識點

2021-08-15 02:38:52 字數 1743 閱讀 2904

之前一直仿照別人用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 ...