c 程式設計基礎(零) 知識點小結

2021-08-20 15:15:14 字數 4238 閱讀 1855

使用assign(僅順序容器)

vectorc;     

vectori;

i.assign(c.begin(),c.end()); //不同型別元素的替換

使用swap

使用swap元素不會真正移動。對於string會導致指標失效,對於array會真正交換元素;

使用insert

vectori1;

auto x = i1.begin() + 2;

i1.insert(x, ); //在x前插入

emplace操作

當呼叫push或insert時先構造乙個臨時物件再拷貝這個物件,而emplace直接在容器的記憶體空間內構造物件;

string的find方法與演算法庫的find函式

find方法未找到返回string::npos(-1);find函式返回乙個迭代器,未找到則迭代器指向序列末尾;

bind引數繫結

auto g = bind(f,a,b,_2,c,_1); //f為接受五個引數的函式

g(x,y);//將引數a,b,c,繫結於g

反向迭代器

當我們從乙個普通迭代器初始化為乙個反向迭代器,或是給乙個反向迭代器賦值時,結果迭代器與原迭代器指向的並不是相同的元素。反向迭代器使用base方法得到普通迭代器。

析構函式

析構函式會首先執行程式體然後按照成員初始化順序的逆序銷毀成員。

如果乙個類需要自定義析構函式,幾乎可以肯定他也需要自定義拷貝賦值運算子和拷貝建構函式。

=delete

class my
可以對任何函式使用=delete,但不能建立析構函式delete的臨時物件。

allocator類

allocatorallo;

auto const p = allo.allocate(10);

allo.construct(p,10,10);

使用allocator類可以將記憶體分配與物件構造分離

右值引用與std::move與引用限定符

右值引用可以簡單的理解為對沒有名字的值的引用,std::move的作用是獲得乙個左值的右值引用;

引用限定符&、&&為指定函式引用為左值或右值引用; 

過載==與《操作符

如果存在唯一一種邏輯可靠的《定義,則應該為這個類定義《運算子。如果類同時還包含==,則當且僅當《的定義和==產生的結果一致時才定義《運算子。

initializer_list

不確定個數形參函式可以使用如fun(initializer_liststr){}

呼叫如fun();

函式物件

過載了()操作符的類物件可以作為類似函式的方式使用;

sort(str.begin(),str,end(),greater()); //在演算法中使用標準庫函式物件
虛函式與預設實參

使用virtual定義虛函式;

如果我們通過基類的引用或指標呼叫函式,則使用基類中定義的預設實參,即使實際執行的是派生類中的函式版本也是如此。

如果虛函式使用預設實參,則基類和派生類中定義的預設實參最好一致。

純虛函式與抽象基類

可以將類的方法定義為fun( ) = 0;來作為乙個純虛函式,含有純虛函式的類為抽象基類。抽象基類負責定義介面,我們不能直接建立乙個抽象基類物件。

名字查詢優先於型別檢查

如果派生類的成員與基類的某個成員同名,則派生類將在其作用域類隱藏該基類成員,即使派生類成員和基類成員的形參列表不一致。所以想要覆蓋基類虛函式,那麼派生類中的虛函式必須與基類中的虛函式必須有相同的形參列表。

虛析構函式

如果我們刪除的是乙個指向派生類物件的基類指標,則需要虛析構函式;

virtual~base() = default;
虛繼承

不論虛基類在繼承體系中出現了多少次,在派生類中都只包含唯一乙個共享的虛基類子物件。

//指定虛基類的方式是在派生列表中新增關鍵字virtual

class child :public virtual base{};

自定義類使用set

一般需要在自定義類裡過載《操作符

bool operator<(const t&) const
以下為c++知識點補充:

左值引用(&):並非物件,只是將引用與它的初始值繫結在一起,且並不能更改繫結物件。

指標(*):指標是乙個物件,擁有普通物件的性質。

nullptr:一種特殊型別的字面值,它可以被轉換為任意其他的指標型別。

const:使用const對物件進行限定使之不能被改變。預設狀態下const物件僅在檔案內有效(想要在多個檔案間共享const物件,必須在變數的定義之前新增extern關鍵字)。

常量指標(*const):允許把指標定義為常量(不變的是指標本身),且必須初始化。

頂層const:指標本身是個常量;底層const:指標所指物件是個常量。

常量表示式(constexpr):指不會改變並且在編譯過程中就能得到計算結果的表示式 (設計目的為了效率,編譯期能夠確定就在編譯期優化)。

別名宣告:using a = b(typedef a b);

auto:型別推斷一般會忽略掉頂層const

decltype:從表示式的型別推斷出要定義的變數的型別,decltype(fun()) a;decltype((i))永遠得到的都是乙個引用。

標準庫函式begin()、 end():使用陣列作為他們的引數,返回指標。

static_cast:對任何具有明確定義的型別轉換,只要不包含底層const都可以使用static_cast.

const_cast:改變常量屬性,常用於有函式過載的上下文中。

reinterpret_cast:強制轉換。

尾置返回型別:auto func(int i)->int(*)[10];

可變資料成員:乙個mutable修飾的成員永遠不會是const即使它是const物件的成員。

友元類:每個類負責控制自己的友元類或友元函式。

建構函式在執行之前會完成成員變數的初始化,函式體內使用=就是賦值操作了。如果成員是const、引用,或者屬於某種未提供預設建構函式的類型別,我們必須通過建構函式初始化列表(a(int i):a(i),b(i){})為這些成員提供初值。

explicit:抑制建構函式定義的隱式轉換,explicit建構函式只能用於直接初始化。

聚合類可以使用 成員初始值列表{}進行初始化。

array:具有固定大小,除了指定元素型別,還要指定容器大小

lambda捕獲列表:[ ] 顯式捕獲、隱式捕獲、引用捕獲、值捕獲方式

當我們需要為乙個lambda定義返回型別時必須使用尾置返回型別 (int i)->int

iostream迭代器:將輸入輸出流當做乙個特定型別的元素序列來處理

使用make_shared(\\輸入t構造函式引數)來替代使用new建立動態記憶體

若使用智慧型指標指向的物件沒有自己的析構函式,我們可以在智慧型指標建立時定義乙個刪除器。shared_ptrp(&c,delet_t);delet_t()為我們自定義的刪除器。

建構函式中,成員的初始化是在函式體執行之前完成;析構hans函式中,先執行函式體然後銷毀成員。

若乙個類需要析構函式則它肯定需要乙個拷貝建構函式和乙個拷貝賦值運算子。

大多數賦值運算子組合了析構函式和拷貝建構函式的工作。

型別轉換運算子:operator type() const;

在模板引數列表中class與typename含義相同;

pair<_1,_2>有預設的比較函式:先會比較_1的大小,若相同再比較_2的大小;

final關鍵字:防止繼承的發生

SQL 知識點小結 (零)

一 認識四個概念 sql structured query language 結構化查詢語言,一種計算機語言。database 資料庫,一般指 relational database即關係型資料庫。sql和database的關係 資料庫是用來儲存大量資料的一種軟體,而sql是用來運算元據庫里的資料的...

c 知識點小結

1 sha1加密 using system.security using system.security.cryptography public static string sha1signature string str c sha1演算法實現及注意問腿 2 c 獲取時間方法 datetime.n...

網路程式設計知識點小結

目錄二 socket c s 客戶端和伺服器 b s 瀏覽器和伺服器,本質上還是客戶端和伺服器 tcp 基於資料流的可靠協議 三次握手 四次揮手 udp 基於資料報的不可靠協議 在傳輸層和應用層之間的一層抽象層,可以操作網路層和傳輸層 1 socketserver模組實現tcp簡單通訊 服務端 匯入...