散碎積累 C

2021-09-26 08:25:13 字數 2405 閱讀 4125

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...