C++ 與OpenCV 學習筆記

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

可變:引用只能在定義時被初始化一次,且「從一而終」;指針能夠修改,「見異思遷」;c++

可空:引用不能爲空;指針能夠爲空;程序員

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

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

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

 

 

聯合體:當多個數據須要共享內存或者多個數據每次只取其一時,能夠利用聯合體(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++編譯的程序佔用的內存分爲如下幾個部分: 一、棧區(stack):由編譯器自動分配釋放,存放函數的參數值,局部變量的值等,其操做方式相似於數據結構的棧。 二、堆區(heap):通常是由程序員分配釋放,若程序員不釋放的話,程序結束時可能由OS回收,值得注意的是他與數據結構的堆是兩回事,分配方式卻是相似於數據結構的鏈表。malloc和new出來的空間就屬於堆區。 三、全局區(static):也叫靜態數據內存空間,存儲全局變量和靜態變量,全局變量和靜態變量的存儲是放一塊的,初始化的全局變量和靜態變量放一塊區域,沒有初始化的在相鄰的另外一塊區域,程序結束後由系統釋放。 四、文字常量區:常量字符串就是放在這裏,程序結束後由系統釋放。 五、程序代碼區:存放函數體的二進制代碼。

相關文章
相關標籤/搜索