mat 的clone()函式是乙個深拷貝函式,呼叫
mat a = b.clone()
a的data會被分配新的記憶體
mat的copyto()函式也是乙個深拷貝函式,但是和clone()函式有一些區別
呼叫b.copyto(a)時,如果b.data指向的位址與a.data的大小型別一致,則b的位址不會被重新分配;如果不一致,則會重新分配記憶體
通過assign()可以為vector變數修改內容值,而把原來的值清除
例如:
a=[1,2,3,4,5,6];
b=[8,9,0];
a.assign(b.begin(),b.begin()+2)
則a=[8,9]
swap()函式是將兩個vector的內容交換的函式,如果將乙個vector的變數與乙個對應的同種型別的空vector進行交換,則能夠實現對該vector的記憶體的釋放。
例如:
vectorcontours2;
經過一系列的操作之後,contours2的記憶體會增大,但是雖然經過後續的操作,contours2的內容可能會減小,但是記憶體不會被釋放,通過如下呼叫可以實現記憶體的釋放
vector().swap(contours2);
是因為,與空的vector swap()之後,記憶體交換後,系統會呼叫乙個析構函式,從而將原來vector對應的記憶體釋放掉。
通過swap()釋放掉記憶體之後,該變數仍然可以使用,相當於乙個沒有分配記憶體的vector
為vector釋放記憶體很有必要,我剛開始使用vector的時候沒有釋放記憶體,不僅記憶體會變大,而且執行類的析構函式時也會出現記憶體錯誤,就算不釋放程式在控制台可以使用,但是生成的dll檔案完全不能用,一呼叫就會出錯。這時候使用swap()函式對vector進行釋放就可以啦
erase()函式是刪除vector中的特定內容
const
const
:常量。建立常量的通用格式:在宣告常量的時候便對常量賦值,否則該常量的值是不固定的且無法修改。
const type name=value
//例如:const int a=0;
常量被初始化之後,其值便被固定,編譯器將不再允許修改該常量的值。
從上述內容,const與 define有類似之處,但是const相對於define有優勢:
const可以明確指定的型別
可以使用c++的作用域規則將定義限制在特定的檔案或函式中
可以將const用於更加複雜的型別,如陣列,結構等。
c++中基本不使用define定義符號常量,而是使用const
static
static
:靜態(變數,函式)。主要有兩個作用:
限定作用域
保持變數內容持久化
靜態類成員有乙個特點:無論建立了多少個物件,程式都只建立乙個靜態類變數副本,也即類的所有物件共享乙個靜態成員。
類中定義靜態變數
class a
在使用到類的cpp中int a::month =12;
進行初始化該靜態變數。
與下邊的靜態常量的不同之處在於,該靜態變數可以改變量值,但是常量不能改變量值
a aa;
a bb;
aa.month=13;
cout輸出也是13。
類中定義靜態常量
同時,在類中宣告的常量由所有的類的物件共享
例如:class a
其中month 與靜態變數儲存在一起,由所有a的物件共享。
類的靜態成員函式
class a
static 在函式宣告的時候使用,實現的時候不需要static的修飾。類的靜態函式,是該類範疇內的全域性函式,不可訪問類的私有成員,只能訪問類的靜態成員,不需要類的例項即可呼叫。是乙個增加了類的訪問許可權的全域性函式
class a
};
呼叫時可以直接使用cout << a::fun(10, 10) << endl;
,
也可以通過類的物件:cout << aa.fun(30, 10) << endl;
同時,該函式實現的時候,不能訪問類的成員。
散碎的小技巧
gets和puts 都是只能讀入或者輸出乙個字串,gets可以接受空格,puts自帶回車技能。strcy 字串複製函式 將字串2複製到字串1當中strcpy str1,str2 字串1的長度需要足夠大,一邊有足夠的容量來儲存被複製的字串2。字串2可以是字元陣列名,可以以是字串常量。例如strcpy ...
在散碎時間中生活,在散碎時間中成長
每天不管是上不上班都感覺很忙,很煩,很亂,時間很緊。沒有自己學習的時間,沒有自己娛樂的時間 總是抱怨時間都去 了!這樣的時間越來越多,這樣的感覺越來越深刻,我自己慢慢覺得不是生活的無奈,而是自己懶散,自己不想成長,自己不想幸福 或者說的更準確點事什麼都不做就可以什麼都很好 這明顯是懶散的作風,是不好...
c 程式設計積累
1.長語句換行 string parastrprojectmode 遇到長語句換行 只要保證 之間的內容在一行就行了 比如 str 這種 不能出現 2.登陸介面,輸入使用者名稱後回車跳到輸密碼文字框 用key press事件,加focus方法。provate void txtusername key...