C Primer Plus 第十六章筆記

2021-08-17 04:40:25 字數 3304 閱讀 5937

一、string類

1.      建構函式:

注:npos為字串的最大長度;nbts表示以空字元結尾的字串

2.      輸入:

3.      使用字串:

(1)      可以運用關係運算子比較字串。

(2)size() 和length() 成員函式返回字串的字元數。

(3)      搜尋字串或字元:

(4)capacity() 返回當前分配給字串的記憶體塊的大小;reverse() 可以請求記憶體塊的最小長度。

(5)c_str() 返回乙個指向c-風格字串的指標。

二、智慧型指標模板類

1.      三個智慧型指標模板(auto_ptr、unique_ptr、shared_ptr)都定義了類似指標的物件,可將new獲得的位址賦給這種物件,當指標過期時,其析構函式將使用delete釋放記憶體。

2.      建立智慧型指標物件需包含標頭檔案memory。

3.      所有智慧型指標都乙個explicit建構函式,該建構函式將指標作為引數。

4.      當兩個指標指向同一物件時:

(1)      定義賦值運算子。

(2)      建立所有權概念,使得對於特定物件只有乙個智慧型指標可擁有它,這是用於auto_ptr和unique_ptr的策略。

(3)      建立智慧型更高的指標跟蹤引用特定物件的智慧型指標數,這是shared_ptr的策略。

5.      程式試圖將乙個unique_ptr賦給另乙個時,如果源unique_ptr是個臨時右值,編譯器允許這樣做,否則編譯器將禁止這樣做。

注:move() 函式允許將乙個unique_ptr賦給另乙個。

6.      使用new分配記憶體時,才能使用auto_ptr和shared_ptr;不使用new或new分配記憶體時,不能使用unique_ptr。

7.      選擇智慧型指標:如果程式要使用多個指向同乙個物件的指標,應選擇shared_ptr;否則可使用unique_ptr或auto_ptr(前者更好)。

8.      在unique_ptr為右值時,可將其賦給shared_ptr。

三、模板類vector

1.      使用動態記憶體分配,可以用初始化引數指出需要多少向量。

2.      基本方法:

(1)size():返回容器中元素數目。

(2)swap():交換兩個容器內容。

(3)begin():返回乙個指向容器第乙個元素的迭代器。

(4)end():返回乙個表示超尾的迭代器。

(5)erase():接受兩個迭代器,刪除量迭代器區間的元素。

(6)insert():接受三個迭代期,第乙個為插入位置,第

二、三為被插入區間。

四、stl(泛型程式設計)

1.stl函式:

(1)for_each()函式:接受三個引數,前兩個是定義容器中區間的迭代期,最後乙個是指向函式的指標即函式物件。該函式使被指向的函式應用於區間的每個元素,被指向的函式不能修改容器元素的值。

(2)random_shuffle()函式:接受兩個指定區間的迭代器引數,並隨機排列該區間的元素。

(3)sort()函式:第乙個版本接受兩個指定區間的迭代器引數,並按公升序排列區間元素;第二個版本還接受第三個引數,該引數指定了要使用的函式指標。

(4)copy()函式:前兩個為要複製範圍區間的迭代器(最好是輸入迭代器),最後乙個為複製到的位置的迭代器(最好是輸出迭代器)。該函式不能自動根據傳送值調整目標容器的長度,可通過三種插入迭代器解決問題:back_insert_iterator(將元素插入到容器尾),front_insert_iterator(插入到容器頭),insert_iterator(插入到指定位置前)。

注意:如果容器元素是使用者定義的物件,則要使用sort(),必須定義能夠處理該型別物件的operator

2.      迭代器型別:

(1)      輸入迭代器:輸入即來自容器的資訊被視為輸入,基於輸入迭代器的任何演算法都應該是單通行的,輸入迭代器是單向迭代器,可以遞增不可倒退。

(2)      輸出迭代器:輸出指用於將資訊從程式傳輸給容器,其只是解除引用讓程式修改容器值而不能讀取。

(3)      正向迭代器:只使用++運算子來遍歷容器,將正向迭代器遞增後仍可以對前面的迭代器值解除引用。

(4)      雙向迭代器:具有正向迭代器的所有特徵,且支援字首和字尾遞減運算子。

(5)      隨機訪問迭代器:具有雙向迭代器的所有特性,且支援隨機訪問操作,有用於對元素進行排序的關係運算子。

總結:對於單通行、唯讀演算法,可以使用輸入迭代器;對於單通行、只寫演算法,可以使用輸出迭代器。

3.      迭代器是stl演算法的介面,而指標是迭代器,因此stl演算法可以使用指標來對基於指標的非stl容器進行操作。

4.      序列容器:

(1)vector:是反轉容器,在尾部新增和刪除元素時間固定,但在頭部或中間插入元素和刪除元素複雜度為線性時間,其強調通過隨機訪問進行快速訪問。一般預設使用這種型別。

(2)deque:雙端佇列,在開始位置插入和刪除元素的時間是固定的。如果多數操作發生在序列的起始和結尾處,則應考慮deque。

(3)list:雙向鍊錶,也是反轉容器,在鍊錶中任一位置進行插入和刪除的時間都是固定的,不支陣列表示法和隨機訪問。

(4)forward_list(c++11):單鏈表,不可反轉的容器,相對list更簡單但功能更少。

(5)queue:其操作有:empty()(是否為空);size() (返回元素數目);front() (返回指向隊首元素的引用);back() (返回指向隊尾元素的引用);push(x) (在隊尾插入x);pop() (刪除隊首元素)。

(6)priority_queue:支援操作與queue相同,區別在於在priority_queue中最大元素被移到隊首。

(7)stack:其操作有:empty()(是否為空);size() (返回元素數目);top() (返回指向棧頂元素的引用);push(x) (在棧頂插入x);pop() (刪除棧頂元素)。

(8)array:並非stl容器,其長度固定。

5.      關聯容器:

(1)set:標頭檔案set中定義,值與鍵型別相同,鍵是唯一的。

(2)multiset:標頭檔案set中定義,可能有多個值的鍵相同。

(3)map:標頭檔案map中定義,值與鍵型別不同,鍵是唯一的。

(4)multimap:標頭檔案map中定義,鍵不唯一。

第十六章 tcp wrappers

在伺服器向外提供的tcp服務上包裝一層安全檢測機制。外來連線請求首先通過這個安全檢測,獲得安全認證後才可被系統服務接受。hosts.allow hosts.deny 在配置檔案中為各服務分別定義訪問控制規則實現訪問控制,檔案中的規則是即時生效的。配置檔案語法 1 daemon list client...

第十六章 執行緒棧

1 基礎 1 執行緒初始化時,執行緒棧預設1m,所有頁面都是page readwrite屬性,但只為前兩個頁面調撥了物理儲存器,位址低的那個頁面叫防護頁面,為其指定了page guard屬性 2 當執行緒訪問到防護頁面時,由於指定了page guard屬性,系統會得到通知,系統會為防護頁面的下乙個頁...

第十六章 控制迴圈

第十六章 控制迴圈 16.1 選擇迴圈的種類 1.在大多數語言中,你只能用到少數幾種迴圈 1 計數迴圈 執行次數一定。2 連續求值的迴圈 預先並不知道將要執行多少次,它會在每次迭代時檢查是否應該結束。3 無限迴圈 一旦啟動就一直執行下去。4 迭代器迴圈 對容器類裡面的每個元素執行一次操作。2.什麼時...