C primer 學習筆記(五)

2021-09-23 23:58:18 字數 2569 閱讀 2380

第八章 標準io庫

1. iostream定義讀寫控制視窗的型別,fstream定義讀寫已命名檔案的型別,而sstream所定義的型別則用於讀寫儲存在記憶體中的string物件;

2.如果函式有基類型別的引用形參時,可以給傳遞其派生型別的物件;

3.只有支援賦值的元素型別可以儲存在vector或其他容器型別裡,因此不存在儲存流物件的vector或其他容器;

4.形參或返回型別也不能為流型別。如果需要傳遞或返回io物件,則必須傳遞或返回指向該物件的指標或引用;

5. 為了確保使用者看到程式實際上處理的所有輸出,最好的方法是保證所有的輸出操作都顯式地呼叫了flush或endl;

6. 當輸入流和輸出流繫結在一起時,任何讀輸入流的嘗試都將首先重新整理其輸出流關聯的緩衝區;

檔案呼叫open函式時必須設定檔案模式,設定可以使顯示或者隱式,如果沒有指明則使用預設值out模式開啟,清空檔案中的已經存在的內容。

開啟檔案的有效模式組合:

7.如果在呼叫tie函式時傳遞實參0,則打破該流上已存在的**;

8.關閉流並不能改變流物件的內部狀態;

第二部分容器和演算法

第九章 順序容器

1.順序容器的元素排列次序與元素值無關,而是由元素新增到容器裡的次序決定;

2.將乙個容器複製給另乙個容器時,型別必須匹配:容器型別和元素型別都必須相同;

複製容器物件的建構函式方法和使用一對迭代器的建構函式的的差異,前者要求容器型別和容器元素型別相同,後者沒有。

3.容器元素型別必須滿足以下兩個約束:

元素型別必須支援賦值運算;

元素型別的物件必須可以複製。

4.除了引用型別外,所有內建或復合型別都可用做元素型別;

5.io庫型別不支援複製和賦值,因此不能建立存放io型別物件的容器;

6.定義元素是容器的容器時,必須用空格隔開兩個相鄰的》符號,以示這是兩個分開的符號,否則,系統會認為》是單個符號,為右移操作符,並結果導致編譯時錯誤;

example:vector< vector> lines;

= = 和!=這兩種關係運算適用所有容器;

8.關係操作符只適用於vector和deque的容器,這是因為只有這兩種容器元素提供快速、隨機的訪問。它們確保可根據元素位置直接有效地訪問指定容器元素;

9.c++語言使用一對迭代器標記迭代器範圍,這兩個迭代器分別指向同乙個容器中的兩個元素或超出末端的下一位置;

所有順序容器都支援push_back操作,提供在容器尾部插入乙個元素的功能;

為了避免儲存end迭代器,可以在每次做完插入運算後重新計算end迭代器;

新增或者刪除

deque和vector容器內的元素,會導致之前儲存的迭代器失效

比較的容器必須具有相同的容器型別,而且其元素型別也必須相同;容器比較是基於容器內元素的比較;

如果兩個容器具有相同的長度而且所有元素對應相同,則這兩個容器相等;如果長度不相等,較短的容器中的元素對應較長的容器對應的元素,則稱之為短的小於長的容器;如果兩個容器是內容不同,則比較結果取決於第乙個不相等的元素。

用迭代器在刪除元素時候,保證迭代器指向不是最後乙個元素之後的位置,否則會導致行為未定義,發生錯誤

13.c++語言只允許兩個容器做其元素型別定義的關係運算;

14.對於所有的容器型別,如果resize操作壓縮了容器,則指向已刪除的元素的迭代器失效;

15.尋找乙個指定元素的最簡單方法是使用標準庫的find演算法;

16.erase、pop_front和pop_back函式通常使指向被刪除元素的所有迭代器失效。對於vector容器,指向刪除點後面的元素的迭代器通常也會失效。而對於deque容器,如果刪除時不包含第乙個元素和最後乙個元素,那麼讀deque容器相關的所有迭代器都會失效;

17.swap操作則不會使迭代器失效。完成swap操作後,儘管被交換的元素已經存放在另一容器中,但迭代器仍然指向相同的元素;

18.要交換的容器的型別必須匹配:運算元必須是相同型別的容器,而且所儲存的元素型別也必須相同;

19.對於大部分應用,使用vector容器時最好的,原因在於,標準庫的實現者使用這樣的記憶體分配策略:以最小的代價連續儲存元素,由此而帶來的訪問元素的便利彌補了其儲存代價;

20.每當vector容器不得不分配新的儲存空間時,以加倍當前容量的分配策略實現重新分配;

size()函式返回的是現在的容器大小,capacity()函式返回的下次達到重新分配時容器中存在的元素數目,reserve()函式實現程式設計師與容器記憶體分配實現的互動,可以設定預留的記憶體空間大小。

string型別不支援以棧方式操縱容器;

string型別共享容器的操作;

22.無論要求賦值多少個字元,標準庫最多只能複製數目與string物件長度相等的字元;

23. stack介面卡可以建立在vector、list或者deque容器之上,queue介面卡只能建立在list容器上,priority_queue介面卡只能建立在vector或deque容器上;

容器類具體圖表過多,請檢視書本。

c primer學習筆記 第五章

別漏寫分號也別多寫分號,如果是空語句需要注釋。while iter svec.end 迴圈體時空語句 iter 遞增運算不屬於迴圈的一部分 復合語句 用花括號括起來的語句和宣告的序列,也稱作塊。乙個塊就是乙個作用域,在塊中引入的名字只能在塊內部及子塊中訪問。塊不以分號結束。else與離他最近尚未匹配...

C Primer學習筆記

學習完乙個知識點後寫上自己的理解。算是總結吧,加深一下自己的印象,也可以在以後複習的時候方便檢視 加油加油!14.1關於運算子的過載 存在的意義 目前看來就是因為操作符大部分是針對資料的,比如int型,char型,書中稱為內建型別。而當類之間想要用操作符的時候,比如兩個類的物件相加,那麼就需要去重 ...

《C Primer》學習筆記

2008年7月18日 颱風海鷗登陸 1 宣告與定義 變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義。變數的宣告用於向程式表明變數的型別和名字。變數的宣告包括物件名 物件型別和物件型別前的關鍵字extern 當設計標頭檔案時,記住定義和宣告的區別是很重要的...