2022年《CPrimer》全書第一輪學(xué)習(xí)筆記匯總_第1頁
2022年《CPrimer》全書第一輪學(xué)習(xí)筆記匯總_第2頁
2022年《CPrimer》全書第一輪學(xué)習(xí)筆記匯總_第3頁
2022年《CPrimer》全書第一輪學(xué)習(xí)筆記匯總_第4頁
2022年《CPrimer》全書第一輪學(xué)習(xí)筆記匯總_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載c+ primer全書第一輪學(xué)習(xí)筆記匯總2021.10.02c+ primer整書學(xué)習(xí)筆記前言第 00 章:前言此次打算了寫c+ primer的學(xué)習(xí)筆記,剛開頭時沒有想到怎么個寫法,為學(xué)完一章后直接寫章結(jié)仍為怎樣,不知道,后來,在學(xué)習(xí)的時候,發(fā)覺,有很多細節(jié)仍為很有用的,不想忘了它們,而之前我又學(xué)過 c+ primer plus,也有一些內(nèi)容已經(jīng)熟記在心里了,所以,現(xiàn)在打算了寫這個學(xué)習(xí)筆記的模式,方法, 框架為怎樣了;第一,我會整章閱讀一次,在認為對自己很有幫忙,或者為之前仍沒有接觸過的學(xué)問點做上記號;然后,這一章終止后,有時我會將其先寫到草稿

2、本上;之后,我會將其錄入電腦,在錄入的時候順帶再強化記憶,然后,假如有些有地方有想說的話的時候,會在后面加一個“摘錄有想”說出自己想說的東西,不過有時候太累贅的話就不說了;我會常常反復(fù)閱讀自己的筆記,當(dāng)然,知道最主要的為上機實踐,不懂的時候再返回書本中的內(nèi)容去看,去練;有人說,這本書你可以直接當(dāng)作字典去查,不用這樣一章章地看下去,但為,我想的為,假如連字典中有些什么內(nèi)容也不知道,提到過的一些學(xué)問點不知道的話,需要用到的時候一點反應(yīng)都沒有,怎么往這里去查呢?所以,我仍為打算,將這本書看一遍,有些地方細看,有些地方粗看,那么等真正需要用的時候,就可以很快地想出曾經(jīng)有這么一個東西可以用,曾經(jīng)書上有提

3、過這么一個東西了;我從08 月 21 日開頭看了這本書,但為那時仍沒有開頭想到要做筆記,由于可怕看了書后也會沒看過一樣,吸取不到什么,不知道自己看過什么,所以,我打算了做筆記;之前一段時間,始終有不少的瑣事 做著,讓我不得連續(xù)在這個陣線上學(xué)習(xí);現(xiàn)在,事情很大部分已經(jīng)解決了,除了每天的上課課程這些學(xué)習(xí) 類的東西干擾這個任務(wù)外,基它就基本沒有什么了,所以,我接下來,會在兼顧現(xiàn)在的學(xué)校的專業(yè)課教學(xué)內(nèi)容的同時,做完這本 c+ primer的學(xué)習(xí)筆記,現(xiàn)在已經(jīng)為 2021 年 09 月 07 日了,大二了,方案 2021年 10 月 15 日前,將此任務(wù)完成;當(dāng)然,會做好方案往往趕不上變化的預(yù)備;那時就

4、,詳細問題詳細分析;嗯,加油!c+ primer第一部分學(xué)習(xí)筆記匯總基本語言c+ primer 第 1 章學(xué)習(xí)筆記第 01 章:快速入門這一章,書上用了一個例子貫穿每部分的內(nèi)容,“書店的書本銷售情形”(包括銷售冊數(shù)與單價);其次節(jié):介紹輸入與輸出 學(xué)習(xí)摘錄001: endl 稱為操縱符 manipulator、 可刷新與設(shè)備相關(guān)聯(lián)的緩沖區(qū);在刷新緩沖區(qū)時,用戶可立刻看到寫入到流中的輸出;程序員常常在調(diào)試過程中插入輸出語句,這些語句都應(yīng)刷新輸出流;摘錄有想 001:這幾句讓我想起之前自己以及伴侶們顯現(xiàn)過的錯誤,當(dāng)if.cin 時,只為cin.clear為不夠的,仍需要用cin.sync清空緩沖區(qū)

5、或者用whilecin.get .= ncontinue; 提取余外字符; 看來以后得多留意輸入輸出緩沖區(qū)了;第三節(jié):關(guān)于注釋精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載 學(xué)習(xí)摘錄002:當(dāng)注釋多行時,最好能直觀指明每一行都為注釋;摘錄有想 002:這讓我留意到了之前沒怎么留意的問題,看數(shù)據(jù)結(jié)構(gòu)與算法分析的一書上為用了這樣的格式的,才發(fā)覺原先那書的編譯習(xí)慣為不錯的;/* now、 for a example.* like this.*/第四節(jié):掌握結(jié)構(gòu) 學(xué)習(xí)摘錄003:關(guān)于掌握結(jié)構(gòu)我想到的為之前c+ primer plus上提到過,循環(huán)(判定條件),條件 if 判定條件 都會

6、將括號內(nèi)的內(nèi)容轉(zhuǎn)換為bool 型作為執(zhí)行與否的依據(jù)的; 學(xué)習(xí)摘錄004:編譯器能查出的最一般的錯誤1.語法錯誤2.類型錯誤3.聲明錯誤摘錄有想 004:知道編譯能檢查出錯誤的話,在編譯習(xí)慣上有些就可以利用這一點了,可以防止在調(diào)試的時候才發(fā)覺錯誤了,這也為一個網(wǎng)友跟我說過起的;如:ifi = 1、 將其寫為if 1 = i 的話就能在編譯時檢測出自己要寫的為 if 1 = i了;第五節(jié):類的簡介 學(xué)習(xí)摘錄005:什么為成員函數(shù):成員函數(shù)為由類定義的函數(shù),有時稱為“類方法”( method ) 學(xué)習(xí)摘錄006:使用類時需留意的三個問題: 1. 類的名字為什么?2. 它在哪里定義?3. 它支持什么操

7、作?摘錄有想 006:很多同學(xué)不明確的一點為第點,之前我看同學(xué)的程序時,問同學(xué)你的這個類想要實行什么樣的功能時,他自己也答不上;c+ primer 第 02 章學(xué)習(xí)筆記第 02 章:變量和基本類型這一章,主要敘述了常量,變量和一些類型的使用方法,留意事項;第三節(jié):變量 學(xué)習(xí)摘錄007: c+為一門靜態(tài)類型語言,在編譯的時候會作類型檢查,靜態(tài)類型檢查能幫忙我們更早地發(fā)覺錯誤;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載摘錄有想 007:靜態(tài)類型使得編譯器必需能識別程序中每個實體的類型;假如沒有定義或定義錯的時候就能檢查出來啦; 學(xué)習(xí)摘錄008:左值: lvalue,左值可以顯現(xiàn)

8、在賦值語句的左邊或右邊;右值: rvalue ,右值只能顯現(xiàn)在賦值的右邊,不能顯現(xiàn)在賦值語句的左邊;變量為左值,因此可以顯現(xiàn)在賦值語句的左邊,數(shù)字字面為右值,因此不能被賦值;摘錄有想 008:在我懂得中,由于變量可在左也可在右,因此它為左值,而數(shù)字就只能顯現(xiàn)在右邊,因此它為右值; 學(xué)習(xí)摘錄009:變量供應(yīng)了可以操作的出名字的儲備區(qū),對象就為內(nèi)存中具有類型的區(qū)域;摘錄有想 009:例如: int a; class b; b c; 這里, a 和 c 屬于對象; 學(xué)習(xí)摘錄010:初始化變量不為賦值;初始化:指創(chuàng)建變量并給它賦初始值;賦值:為擦除對象的當(dāng)前值并用新值代替; 學(xué)習(xí)摘錄011:初始化變量

9、有兩種形式; 1. int ival1024;/ direct-initialization直接初始化 2.int ival = 1024;/ copy-initialization復(fù)制初始化 學(xué)習(xí)摘錄012:復(fù)制初始化和直接初始化之間的差別為很微妙的;現(xiàn)在我們只需知道,直接初始化的效率更高; 學(xué)習(xí)摘錄013:未初始化變量引起的錯誤難以發(fā)覺,永久不要依靠未定義行為,使用未初始化的變量為常見的程序錯誤;雖然很多編譯器都至少會提示不要使用未初始化變量,但為編譯器并未被要求去檢測未初始化變量的使用;而且,沒有一個編譯器能檢測出全部未初始化變量的使用; 學(xué)習(xí)摘錄014: extern 聲明不為定義,也

10、不安排儲備空間;事實上,它只為說明變量定義在程序的其他地方;摘錄有想 014: extern 的使用得留意, 一個文件里面放定義,另外一個文件里面放聲明才可以,上次同學(xué)就為犯了這樣的錯誤,沒有在另一個文件中聲明就想用extern 變量了; 學(xué)習(xí)摘錄015:只有當(dāng)聲明也為定義時,聲明才可以有初始化式,因此只有定義才安排儲備空間;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載 學(xué)習(xí)摘錄015:看來下次寫程序時真的要直接在聲明的時候就定義好,那樣的話就安全多了; 學(xué)習(xí)摘錄016:作用域可以分為三種: .全局作用域(global scope) .局部作用域(local scope) .

11、語句作用域(statement scope )摘錄有想 016:有語句forint val = 1; val <= 10; +val sum += val;此處, val 定義在 for 語句的作用域中,只能在for 語句中使用,而不能在main 函數(shù)的其他地方; 學(xué)習(xí)摘錄017:通常把一個對象定義在它首次使用的地方為一個很好的方法;放置聲明的一個約束為,變量只在從其定義處開頭到聲明所在的作用域的終止才可以拜訪;第五節(jié):引用 學(xué)習(xí)摘錄018:“ const 引用”的意思為“指向const 對象的引用” ; 學(xué)習(xí)摘錄019:非 const 引用只能綁定到與該引用同類型的對象; const

12、引用就可以綁定到不同但相關(guān)的類型對象或綁定到右值;第八節(jié):類類型 學(xué)習(xí)摘錄020:每類都定義了一個接口(interfer )和一個實現(xiàn);接口由使用該類的代碼需要執(zhí)行的操作實組成;實現(xiàn)一般包括該類所需要的數(shù)據(jù);類體定義了組成該類型的數(shù)據(jù)和操作;操作稱為成員函數(shù),數(shù)據(jù)就稱為數(shù)據(jù)成員; 學(xué)習(xí)摘錄021:用 class 和 sturct 關(guān)鍵定義類的唯獨差別在于默認拜訪級別:默認情形下, struct 的成員為 pulbic ,而 class的成員為private. 學(xué)習(xí)摘錄022:當(dāng)我們在頭文件中定義了const 變量后,每個包含該頭文件的源文件都有了自己的const 變量,其名稱和值一樣; 學(xué)習(xí)摘

13、錄023:防止多重包含,為了防止多重包含,防止名字沖突,預(yù)處理器變量常常用全大寫字母表示;#ifndef abc_h精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載#define abc_h / definition of abc class and related functions goes here#endif摘錄有想 023:看了這么多書,這么多個例子,最終知道為什么它總為用大寫來表示了;c+ primer 第 03 章學(xué)習(xí)筆記第 03 章:標(biāo)準(zhǔn)庫類型c+仍定義了一個內(nèi)容豐富的抽象數(shù)據(jù)類型標(biāo)準(zhǔn)庫,其中最重要的標(biāo)準(zhǔn)庫類型為string 和 vector ,它們分別定義了大小

14、可變的字符串和集合;另一種標(biāo)準(zhǔn)庫類型bitset 供應(yīng)了一種抽象方法來操作位集合;第一節(jié):命名空間using 聲明 學(xué)習(xí)摘錄024:一旦使用了using 聲明,我們就可以直接引用名字,而不需要再引用該名字的命名空間: / using declaration states our intent to use these names from the namespace std. using std:cin; using std:string; 學(xué)習(xí)摘錄025:假如在頭文件中放置using 聲明,就相當(dāng)于在包含該文件的每個程序中都放置了同一個using 聲明,不論該程序為否需要using 聲明;摘

15、錄有想 025:我想這相當(dāng)于全局變量跟局部變量的作用吧; 學(xué)習(xí)摘錄026:通常頭文件中應(yīng)當(dāng)只定義的確必要的東西;請養(yǎng)成這個習(xí)慣;摘錄有想 026:書上建議少用using namespace std 這樣的風(fēng)格,以后寫程序就盡量用using 聲明吧,少用using 編譯指令;其次節(jié):標(biāo)準(zhǔn)庫string 類型 學(xué)習(xí)摘錄027: string 操作 s.empty /檢查字符為否為空,bool 類型 s.size; /返回 s 中字符的個數(shù) sn;/返回 s 中位置為n 的字符,位置從0 開頭計數(shù)摘錄有想 027:以前仍不知道原先有empty 這一操作,初見empty 仍以為要清空這個對象的數(shù)據(jù)呢,

16、其實不然,為檢查字符串為否為空;ifs.empty / ok、 empty 學(xué)習(xí)摘錄028: size 操作返回的為string:size_type類型的值; string 類類型和很多其他庫類型都定義了一些配套類型 companion type ;通過這些配套類型,庫類型的使用就能與機器無關(guān)machine-independent ;size_type 就為這些配套類型中的一種;它定義為unsigned 型( unsigned int或 unsigned long )具有相同的含義,而且可以精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載保證足夠大能夠儲備任意string 對象的

17、長度;摘錄有想 028:寫程序時不要把size 的返回值賦給一個int 變量了; 學(xué)習(xí)摘錄029:如在有16 位 int 型的機器上,int 類型變量最大只能表示32767 個字符的string 對象,而能容納一個文件內(nèi)容的string 對象輕易就會超過這個數(shù)字;因此,為了防止溢出,儲存一個string 對象 size 的最安全的方法就為使用標(biāo)準(zhǔn)庫類型string:size_type 學(xué)習(xí)摘錄030: string 對象比較操作為區(qū)分大小寫的,即同一個字符的大小寫形式被認為為兩個不同的字符;在多數(shù)運算機上,大寫的字母位于小寫字母之前;任何一個大寫字母都小于任意的小寫字母;摘錄有想 030:在比

18、較時需留意大小寫了,想起以前cctype 有一個用于轉(zhuǎn)換字符的函數(shù),把大寫轉(zhuǎn)為小寫之類的功能可以很簡潔實現(xiàn); 學(xué)習(xí)摘錄031: string 類型通過下標(biāo)操作符( )來拜訪string 對象中的單個字符;下標(biāo)操作符需要一個size_type 類型的值,來標(biāo)明要拜訪字符的位置;這個下標(biāo)中的值通常被稱為“下標(biāo)”或“索引(index)”; 學(xué)習(xí)摘錄032: string 對象的下標(biāo)從0 開頭,而ss.size1就表示 s 的最終一個字符;第三節(jié):標(biāo)準(zhǔn)庫vector 類型 學(xué)習(xí)摘錄033:雖然可以對給定元素個數(shù)的vector 對象預(yù)先安排內(nèi)存, 但更有效的方法為先初始化一個空vector 對象,然后再

19、動態(tài)地增加元素; 學(xué)習(xí)摘錄034: c+程序員習(xí)慣于優(yōu)先選用.=而不為 <來編寫循環(huán)判定條件; 學(xué)習(xí)摘錄035:我們傾向于在每次循環(huán)中測試size 的當(dāng)前值,而不為進入循環(huán)前,儲備size 值的副本;調(diào)用size 成員而不儲存它返回的值,這反映了一種良好的編程習(xí)慣;摘錄有想 035:以后在使用for 時,可以留意一下這個問題了;第四節(jié):迭代器簡介; 學(xué)習(xí)摘錄036:迭代器為一種檢查容器內(nèi)元素并遍歷元素的數(shù)據(jù)類型;如一種類型支持一組確定的操作(這些操作可用來遍歷容器內(nèi)的元素并拜訪這些元素的值),我們就稱這種類型為迭代器;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載 學(xué)習(xí)摘

20、錄037: vector<int>:iterator iter = ivec.begin;由 end 操作返回的迭代器指向vector 的“末端元素的下一個”,通常稱為超出未端迭代器(off-the-end iterator ),說明它指向了一個不存在的元素;假如 vector 為空,begin 返回迭代器與end 返回的迭代器相同; 學(xué)習(xí)摘錄038:由 end 操作返回的迭代器并不指向vector 中任何實際的元素,相反,它只為起一個哨兵(sentinel)的 作用,表示我們已經(jīng)處理完vector 中全部的元素; 學(xué)習(xí)摘錄039:迭代器類型可以使用解引用操作符(* 操作符)來拜訪

21、迭代器所指向的元素:*iter= 0;由于 end 返回的迭代器不指向任何元素,因此不能對它進行解引用或自增操作; 學(xué)習(xí)摘錄040:使用const_iterator類型時,我們可以得到一個迭代器,它自身的值可以轉(zhuǎn)變,但不能用來轉(zhuǎn)變其指向的元素的值;可以對迭代器進行自增以及使用引用操作符來讀取值,但不能對該元素值賦值;c+ primer 第 04 章學(xué)習(xí)筆記第 04 章:數(shù)組和指針其次節(jié):指針的引入 學(xué)習(xí)摘錄041:指針的概念很簡潔,指針用于指向?qū)ο?;與迭代器一樣,指針供應(yīng)對其所指對象的間接拜訪,只為指針結(jié)構(gòu)更通用一些;與迭代器不同的為,指針用于指向單個對象,而迭代器只能用于拜訪容器內(nèi)的元素;

22、學(xué)習(xí)摘錄042:假如可能的話,除非所指向的對象已經(jīng)存在,否就不要先定義指針,這樣可防止定義一個未初始化的指針,假如必需分開定義指針和其所指針的對象,就將指針初始化為0,由于編譯器可檢測出0 值的指針,程序可判定該指針并未指向一個對象;摘錄有想 042:我想這也就為說,定義指針最好有初始化,防止不必要的錯誤; 學(xué)習(xí)摘錄043:預(yù)處理器變量不為在std 命名空間中定義的,因此其名字應(yīng)為null,而非 std:null; 學(xué)習(xí)摘錄044: c+供應(yīng)了一個特殊的指針類型void* ,它可以儲存任何類型對象的地址; void* 主要用于以下三種操作: 1. 與另一個指針進行比較 2. 向函數(shù)傳遞void

23、* 指針或從函數(shù)返回void* 指針 3. 給另一個void* 指針賦值精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載double obj = 3.14; double *pd = &obj;/ ok、 void * can hold the address value of any data pointer type void * pv = & obj;/ obj can be an object of anytypepv = pd;/ pd can be a pointer to any type 學(xué)習(xí)摘錄045:指針與引用的區(qū)分指針與引用的相同點:都可間接

24、拜訪另一個值第一區(qū)分:引用總指向某個對象,定義引用時設(shè)有初始化為錯誤的;其次區(qū)分:賦值行為的差異:給引用賦值修改的為該引用所關(guān)聯(lián)的對象的值,而不使引用與別一個對象關(guān)聯(lián); 學(xué)習(xí)摘錄046: c+答應(yīng)運算數(shù)組或?qū)ο蟮某鑫炊说牡刂?但不答應(yīng)對此進行解引用操作(* 解引用操作) ,而運算數(shù)組超出未端位置之后或數(shù)組首地址之前的地址都為不合法的;第三節(jié): c 風(fēng)格字符串 學(xué)習(xí)摘錄047: c 風(fēng)格字符串與c+的標(biāo)準(zhǔn)庫類型string 的比較以下兩段程序反映了使用c風(fēng)格字符串與c+的標(biāo)準(zhǔn)庫類型string 的不同之處,使用string 類型的版本更短.更簡潔懂得,而且出錯的可能性更?。? c-style

25、character string implementationconst char * pc =“ a very long literal string.”;const size_t len = strlenpc;/ space to allocate/ performance test on string allocation and copy for size_t ix = 0; ix .= 1000000; +ixchar * pc2 = new charlen + 1;/ allocate the space strcpypc2、 pc;/ do the copyifstrcmppc2

26、、 pc/ user the new string;/ do nothingdelete pc2;/ free memory/ string implementationstring str“ a very long literal string” ;/ performance test on string allocation and copy forsize_t ix = 0; ix .= 1000000; +ixstring str2 = str; / do the copy、 automatically allocated ifstr .= str2; / do nothing/ st

27、r2 is automatically freed精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載第四節(jié):多維數(shù)組 學(xué)習(xí)摘錄048:嚴格來說,c+中沒有多維數(shù)組,通常所指的多維數(shù)組的數(shù)組;/ array of size 3、 each element is an array of ints of size 4 int ia34;在使用多維數(shù)組時,記住這一點有利于懂得其應(yīng)用;術(shù)語: 學(xué)習(xí)摘錄049: ptrdiff_t :在 cstddef 頭文件中定義的與機器相關(guān)的有符號整型,該類型具有足夠大小儲備兩個指針的差值,這兩個指針指向同一個可能的最大數(shù)組; size_t:在 cstdd

28、ef 頭文件中定義的與機器相關(guān)的無符號整型,它具有足夠大小儲備一個可能的最大數(shù)組;c+ primer 第 05 章學(xué)習(xí)筆記第 05 章:表達式第五節(jié):自增和自減操作符 學(xué)習(xí)摘錄050:自增和自減操作符建議:只有在必要時才使用后置操作符;前置操作需要做的工作更少,只需加1 后返回加1 后的結(jié)果即可;而后置操作符就必需先儲存操作數(shù)原先的值,以便返回未加1 之前的值作為操作的結(jié)果;對于int 型對象和指針,編譯器可優(yōu)化掉這項額外工作;但為對于更多的復(fù)雜迭代器類型,這種額外工作可能花費更大的代價;養(yǎng)成使用前置操作這個好習(xí)慣,就不必操勞性能差異的問題; 學(xué)習(xí)摘錄051:在單個表達式中組合使用解引用和自增

29、操作 *iter+ 的意思:等效于*iter+ ;子表達式iter+ 使 iter 加 1,然后返回iter 原值的副本作為該表達式的結(jié)果;vector<int>:iterator iter = ivec.begin;/ prints 10 9 81whileiter .= ivec.endcout << *iter+ << endl;/ iterator postfix increment摘錄有想:很多c+程序員都會習(xí)慣用這種方法的,可以簡潔清晰不冗長; 第十一節(jié): new 和 delete表達式 學(xué)習(xí)摘錄052:動態(tài)創(chuàng)建對象的默認初始化在動態(tài)創(chuàng)建對象時,

30、(幾乎)總為對它做初始化也為一個好方法;同樣也可以對動態(tài)創(chuàng)建的對象做值初始化精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載string *ps = new string;/ initialized to empty stringint *pi = new int;/ pi points to an int value-initialized to 0cls *pc = new cls;/ pc points to a value-initialized object of type cls對比下面的不同初始化方式的不同int *pi = new int;/ pi points

31、to an uninitialized intint *pi = new int;/ pi points to an int value-initialized to 0 學(xué)習(xí)摘錄053:一旦刪除了指針?biāo)赶虻膶ο?立刻將指針置為0,這樣就特別清晰地說明指針不再指向任何對象;摘錄有想:假如用了delete *p;之后p = null;第十二節(jié):顯式轉(zhuǎn)換 學(xué)習(xí)摘錄054:命名的強制類型轉(zhuǎn)換cast-name<type>expression; dynamic_cast,支持運行時識別指針或引用指向的對象; const_cast,將轉(zhuǎn)換掉表達式的const 性質(zhì); static_cast

32、,編譯器隱式執(zhí)行的任何類型轉(zhuǎn)換都可以由static_cast 顯式完成; reinterpret_cast ,通常為操作數(shù)的位模式供應(yīng)較低層次的重新說明;摘錄有想:我想一般現(xiàn)在寫程序的時候用到最多的為static_cast 吧,而且,書上也建議,不要常用強制轉(zhuǎn)換,假如程序?qū)懙煤玫脑?就根本不用用上這個功能;c+ primer 第 06 章學(xué)習(xí)筆記第 06 章:語句其次節(jié):復(fù)合語句(塊) 學(xué)習(xí)摘錄055:復(fù)合語句( compound statement ),通常被稱為塊(block),為用一對花括號括起來的語句序列(也可能為空的);塊標(biāo)識了一個作用域,在塊中引入的名字只能在該塊內(nèi)部或嵌套在塊中的

33、子塊里拜訪;第十二節(jié): goto 語句 學(xué)習(xí)摘錄056:從上世紀60 歲月后期開頭,不主見使用goto 語句, goto 語句使跟蹤程序掌握流程變得很困難,并且使程序難以懂得,也難以修改;全部使用goto 的程序都可以改寫為不用goto 語句,因此也就沒有必要使用goto 語句了;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載c+ primer 第 07 章學(xué)習(xí)筆記第 07 章:函數(shù)本章介紹(function )的定義和聲明;其次節(jié):參數(shù)傳遞 學(xué)習(xí)摘錄057:數(shù)組形參性質(zhì)數(shù)組形參有兩個特殊的性質(zhì),影響我們定義和使用作用在數(shù)組上的函數(shù); 1.不能復(fù)制數(shù)組 2.使用數(shù)名字時,數(shù)組名

34、會自動轉(zhuǎn)化為指向其第一個元素的指針 學(xué)習(xí)摘錄058:數(shù)組形參在函數(shù)中聲明方法/ three equivalent definitions of printvalues void printvaluesint * /*/ void printvaluesint /*/ void printvaluesint10 /*/ 雖然不能直接傳遞數(shù)組,但為函數(shù)的形參可以寫成數(shù)組的形式;雖然形參表示方式不同,但可將使用數(shù)組語法定義的形參看作指向數(shù)組元素類型的指針; 學(xué)習(xí)摘錄059:通過引用傳遞數(shù)組和其它類型一樣,數(shù)組形參可聲明為數(shù)組的引用;編譯器檢查數(shù)組實參的大小與形參的大小為否匹配;這個版本的printv

35、alues 函數(shù)只嚴格地接受含有10 個 int 型數(shù)值的數(shù)組,這限制了哪些數(shù)組可以傳遞;然而,由于形參為引用,在函數(shù)體中依靠數(shù)組的大小為安全的;/ ok: parameter is a reference to an array; size of array is fixed void printvaluesint &arr10for size_t i = 0; i .= 10; +icout << arri << endl;第三節(jié): return 語句 學(xué)習(xí)摘錄060:主函數(shù) main 的返回值答應(yīng)主函數(shù)main 沒有返回值就可終止,假如程序掌握執(zhí)行到主函數(shù)

36、main 的最終一個語句都仍沒有返回,那么編譯器會隱式地return 0;這為返回類型不為void 的函數(shù)必需返回一個值的規(guī)章的例外情形;主函數(shù)main 返回的值視為狀態(tài)指示器,返回0 表示程序運行勝利,其它大部分返回值就表示失?。坏诎斯?jié):重載函數(shù) 學(xué)習(xí)摘錄061:精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載重載函數(shù)定義:顯現(xiàn)在相同作用域中的兩個函數(shù),具有相同的名字而形參表不同的函數(shù);c+ primer 第 08 章學(xué)習(xí)筆記第 08 章:標(biāo)準(zhǔn)io 庫 c+的輸入 / 輸出( input/output)由標(biāo)準(zhǔn)庫供應(yīng);標(biāo)準(zhǔn)庫定義了一族類型,支持對文件和掌握窗口等設(shè)備的讀寫( io

37、);第一節(jié):面對對象的標(biāo)準(zhǔn)庫 學(xué)習(xí)摘錄062: iostream 定義讀寫掌握窗口的類型 istream從流中讀取 ostream寫到流中去 iostream對流進行讀寫;從istream 和 ostream 派生而來 學(xué)習(xí)摘錄063: fstream 定義讀寫已命名文件的類型 ifstream從文件中讀取;由istream 派生而來 ofstream寫入到文件中;由ostream 派生而來 fstream 讀寫文件;由iostream 派生而來 學(xué)習(xí)摘錄064: sstream 定義的類型用于讀寫儲備在內(nèi)存中的string 對象 istringstream 從 string 對象中讀?。挥蒳

38、stream 派生而來 ostringstream 寫入到 string 對象中去;由ostream 派生而來 stringstream 對 string 對象進行讀寫,由iostream 派生而來其次節(jié):條件狀態(tài)(condition state ) 學(xué)習(xí)摘錄065: io 錯誤例子:以下例子,假如在標(biāo)準(zhǔn)輸入設(shè)備輸入borges;就 cin 在嘗試將輸入的字符串讀為int 型數(shù)據(jù)失敗后,會生成一個錯誤狀態(tài);假如輸入文件終止符(end-of-file ) ;就 cin 也會進入錯誤狀態(tài);而假如輸入1024,就勝利讀取,cin 將處于正確的無錯誤狀態(tài);流必需處于無錯誤狀態(tài),才能用于輸入或輸出;檢測

39、流為否可用的最簡潔的方法為檢查其真值;ifcin / ok to use cin、 it is in a valid statewhilecin >> word / ok: read operation successful 學(xué)習(xí)摘錄066:各種條件狀態(tài)的定義 s.bad, badbit 標(biāo)志著系統(tǒng)級的故障,如無法復(fù)原的讀寫錯誤; s.fail, failbit 標(biāo)志著顯現(xiàn)可復(fù)原的錯誤,這種導(dǎo)致設(shè)置failbit 的問題通常為可以修正的; s.eof , eofbit 遇到文件終止符時設(shè)置的; s.good,假如 bad.fail 或者 eof 中的任意一個為true ,就檢查流本

40、身將顯示該流處于錯誤狀態(tài);假如精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載這三個條件沒有一個為true ,就 good 操作將返回true ; s.clear, clear 操作將條件重設(shè)為有效狀態(tài); 學(xué)習(xí)摘錄067:流狀態(tài)的查詢和掌握回憶逗號操作符的求解過程:第一運算它的每一個操作數(shù),然后返回值右邊的操作數(shù)作為整個操作的結(jié)果;int ival;/ read cin and test only for eof; loop is executed even if there are other io failures whilecin >> ival、 .cin.e

41、of if cin.bad/ input stream is corrupted; bail out throw runtime_error“io stream corrupted ”;if cin.fail/ bad inputcerr << “bad data、 try again ”; / warn the user cin.clearistream:failbit;/ reset the stream continue;/ get next input/ ok to process ival第三節(jié):輸出緩沖區(qū)的治理 學(xué)習(xí)摘錄068:緩沖區(qū)的刷新下面五種情形將導(dǎo)致緩沖區(qū)的內(nèi)容

42、被刷新,即寫入到真實的輸出設(shè)備或者文件: 1. 程序正常終止;作為main 返回工作的一部分,將清空全部的輸出緩沖區(qū); 2. 在一些不確定的時候,緩沖區(qū)可能已經(jīng)滿了,在這種情形下,緩沖區(qū)將會寫到下一個值之前刷新; 3. 用操縱符( manipulator )顯式地刷新緩沖區(qū),例如行終止符endl. 4. 在每次輸出操作執(zhí)行完后,用unitbuf 操縱符設(shè)置流的內(nèi)部狀態(tài),從而清空緩沖區(qū); 5. 可將輸出流與輸入流關(guān)聯(lián)(tie )起來;在這種情形下,在讀輸入流將刷新其關(guān)聯(lián)的輸出緩沖區(qū); 學(xué)習(xí)摘錄069: unitbuf 操縱符與flush 操縱符假如需要刷新全部輸出,最好使用unitbuf 操縱符

43、; unitbuf 操縱符在每次執(zhí)行完寫操作后都刷新流: cout << unitbuf << “first ”<< “second”<< nounitbuf;等價于cout << “first ”<< flush << “second” << flush;第四節(jié):文件的輸入與輸出 學(xué)習(xí)摘錄070:讀取一個存放文件名的容器,打開每個文件此例中,假如忽視clear 的調(diào)用,就循環(huán)只能讀入第一個文件;ifstream input;vector<string>:const_iterator i

44、t = files. begin;/ for each file in the vector精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載while it .= files.end input.openit -> c_str;/ open the file/ if .inputbreak;/ error: bail out. whileinput >> s/ do the work on this fileprocesss;input.close; / close file when we re done with it input.clear;/ reset

45、 state to ok+it;/ increment iterator to get next file第五節(jié):字符串流 學(xué)習(xí)摘錄071:操縱每行中的每個單詞的實例string line、 word;/ will hold a line and word from input、 respectively whilegetlinecin、 line/ read a line from the input into line/ do per-line processingistringstream streamline;/ bind to stream to the line we read w

46、hilestream >> word/ read a word from line/ do per-word processing使用getline 函數(shù)從輸入讀取整行內(nèi)容;然后為了獲得每行中的單詞,將一個istringstream對象與所讀取的行綁定起來,這樣只需使用一般的string 輸入操作符即可讀出每行中的單詞;c+ primer其次部分學(xué)習(xí)筆記匯總?cè)萜髋c算法c+ primer 第 09 章學(xué)習(xí)筆記第 09 章:容器與算法學(xué)習(xí)摘錄072:次序容器將單一類型元素集合起來成為容器,然后依據(jù)位置來儲備和拜訪這些元素,這就為次序容器; vector支持快速隨機拜訪 list支持快速

47、插入 / 刪除 deque雙端隊列學(xué)習(xí)摘錄073:次序容器適配器適配器為依據(jù)原始的容器類型所供應(yīng)的操作,通過定義新的操作接口,來適應(yīng)基礎(chǔ)的容器類型; stack后進先出( lifo)棧 queue先進先出( fifo)隊列 priority_queue有優(yōu)先級治理的隊列精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載第一節(jié):次序容器的定義(初始化)學(xué)習(xí)摘錄074:新建一個容器初始化為另一個容器的副本 vector <int> ivec; vector<int> ivec2ivec;/ ok、 ivec is vector<int> list&l

48、t;int> ilistivec;/ error: ivec is not list<int> vector<double> dvecivec;/ error: ivec holds int now double將一個容器復(fù)制給另一個容器時,類型必需匹配:容器類型和元素類型都必需相同;摘錄有想 074:這也就為說,容器復(fù)制的時候,只需考慮的為容器類型和元素類型,并不需要考慮原容器中的元素數(shù)量了,以前曾經(jīng)想過這個問題;也會想一個問題,在定義新容器的時候,會不會顯現(xiàn)溢出的情形呢?學(xué)習(xí)摘錄075:初始化為一段元素的副本系統(tǒng)答應(yīng)通過傳遞一對迭代器間接實現(xiàn)該功能;使用迭代器

49、時,不要求容器類型相同,容器內(nèi)的元素類型也可以不相同,只要它們相互兼容能進行轉(zhuǎn)換即可; / initialize slist with copy of each element of svec list<string> slistsvec.begin、 svec.end ; / find midpoint in the vector vector<string>:iterator mid = svec.begin + svec.size / 2; / initialize front with first half of svec: the elements up to

50、 but note include *mid deque<string> frontsvec.begin、 mid; / initialize back with second half of svec: the elements *mid through end of svec deque<string> backmid、 svec.end ;摘錄有想 075:利用迭代器復(fù)制相當(dāng)?shù)谋憷?削減了很多限制,仍可以不同類型的復(fù)制,只為也要考慮到一個方面,穩(wěn)固性,假如需要隱式轉(zhuǎn)換的地方仍為少用的好;一段段的復(fù)制挺好的;同時,留意考慮它的區(qū)間為左閉右開的區(qū)間來的;學(xué)習(xí)摘錄076

51、:容器內(nèi)元素的類型約束元素類型必需支持賦值運算;元素類型的對象必需可復(fù)制;摘錄有想 076:這個問題,雖然不常發(fā)生,int 型之類的內(nèi)置類型不用考慮這個問題,而一些自己定義的類類型的話,真的得留意了;學(xué)習(xí)摘錄077:容器的容器定義容器的容器時,有一個問題必需得留意的: vector< vector<string> > lines; / ok:space required between cblose> vector<vector<string>> lines; / error: >> treated as shift operator必需用空格隔開兩個相鄰的>符號,以示這為兩個分開的符號;否就,系統(tǒng)會認為>>為單個符號,為右移操作符,并結(jié)果導(dǎo)致編譯時的錯誤;摘錄有想 077:網(wǎng)上的帖子看過很多人顯現(xiàn)這個錯,經(jīng)典錯誤啊,就一個空格之差,讓人看得糾結(jié),寫程序時,細節(jié)精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載學(xué)習(xí)必備歡迎下載打算成?。黄浯喂?jié):迭代器和迭代器范疇學(xué)習(xí)摘錄078:迭代器范疇 c+語言使用一對迭代器標(biāo)記迭代器范疇,這兩個迭代器分別

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論