C++ 與OpenCV 學習筆記


依賴:指針是一個變量,指向本體;引用只是一個別名(本體的另一個名字),綁定在主體上

可變:引用只能在定義時被初始化一次,且“從一而終”;指針可以修改,“見異思遷”;

可空:引用不能為空;指針可以為空;

大小:sizeof 引用,得到的是所指向變量的大小;sizeof 指針,得到的是指針的大小;

自增:指針 ++,是指指針的地址自增;引用++是指所指變量自增;

類型:引用是類型安全的,引用過程會進行類型檢查;指針不會進行安全檢查;

 

 

聯合體:當多個數據需要共享內存或者多個數據每次只取其一時,可以利用聯合體(union)

1. 聯合體是一種結構;

2. 他的所有成員相對於基地址的偏移量均為0;

3. 此結構空間要大到足夠容納最“寬”的成員;

  //但是其大小不僅僅由最寬的成員決定,還需要考慮每個成員的自身對齊方式!

4. 其對齊方式要適合其中所有的成員。

 

const作用:

c++編譯器會在編譯時,把常量優化成立即數,減少內存訪問。因此,能夠使用const的變量(在運行過程中不會發生變化的變量),盡量使用const去修飾。

特別是處理矩陣以及圖像指針運算時。

 

inline function 內聯函數:

函數調用的開銷是很大的,如果有一段短小而需要頻繁調用的函數,可以寫為內聯函數。

也就是建議編譯器在函數調用點上展開代碼后再進行編譯。

這里的建議意思是,如果函數較復雜,編譯器是不會內聯的,即使內聯了,只會讓編譯花費更多時間,並且很多編譯器不允許遞歸函數的內聯。

 

范數:

給定向量 x = (x1, x2, x3, ... xn)

L1范數:向量各個元素絕對值之和,

L2范數:向量各個元素絕對值平方求和然后平方根,

Lp范數:向量各個元素絕對值p次方求和然后1/p次方,

L∞ (Lc范數)范數:向量各個元素求絕對值,其中的最大值。

 

指針與引用:

指針是一個變量,存儲的是另外一個變量的地址,這另外的變量的類型是指針的基類型,也就是指針指向的內存空間的類型。而指針本身占用的是一個16進制的內存空間(2個字節)。

int a = 1;

int* b = &a;

void func(int* p){}

調用:func(b);

引用 只是變量的一個別名,相當於綽號。

int a = 1;

int& b = a;

void func(int& p){}

調用:func(b);

*** 引用在創建時必須被初始化,因為引用不能指向空值。

引用的作用,使用指針都能完成,為什么還要使用引用?

  因為指針比較危險,在確定只需要只用引用傳遞功能時,可以只使用引用。(函數調用時)

 

2016-11-17 今天花了兩個多小時才解決了一個問題:

opencv的cvMat結構向eigen的Matrix結構轉換時,

需要使用opencv的 #include <opencv2/core/eigen.hpp>頭文件,

而該文件又是依賴於eigen核心庫 #include <Eigen/Core>的。

重點是在寫預處理代碼時,注意順序!先包含eigen相關庫,再包含opencv庫!不然opencv會找不到eigen。。。。哭了

 

2016-11-19

linux目錄:

/usr 是系統級目錄,相當於 C:/windows, /usr/lib 相當於 C:/windows/system32; 其中存放系統軟件,例如PCL庫。系統源碼放在/usr/src

/usr/local 是用戶級目錄,相當於C:/Program Files ;存放用戶常用第三方庫,例如OpenCV,g2o;

/opt 是可選的意思,相當於D:/software, 在硬盤空間不夠時,可以將其直接掛載到外部存儲上,不影響使用。相當於一些硬盤版的軟件。

 

2016-12-06

集合和多元組的區別:

多元組:可重復有順序!

 

一個由C/C++編譯的程序占用的內存分為以下幾個部分:

 1、棧區(stack):由編譯器自動分配釋放,存放函數的參數值,局部變量的值等,其操作方式類似於數據結構的棧。

 2、堆區(heap):一般是由程序員分配釋放,若程序員不釋放的話,程序結束時可能由OS回收,值得注意的是他與數據結構的堆是兩回事,分配方式倒是類似於數據結構的鏈表。malloc和new出來的空間就屬於堆區。

 3、全局區(static):也叫靜態數據內存空間,存儲全局變量和靜態變量,全局變量和靜態變量的存儲是放一塊的,初始化的全局變量和靜態變量放一塊區域,沒有初始化的在相鄰的另一塊區域,程序結束后由系統釋放。

 4、文字常量區:常量字符串就是放在這里,程序結束后由系統釋放。

 5、程序代碼區:存放函數體的二進制代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM