一、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.什麼時...