《C++ Primer 第五版》(第2.5節,第3.1-3.4節) ——采用預處理功能編寫頭文件,string初始化和字符操作,vector初始化和迭代器

1.采用預處理功能編寫頭文件

? ? ? ? ?在頭文件定義(頭文件中的內容是只能被定義一次的實體)過程中,為了防止頭文件重復包含的情況,采用預處理器的一個頭文件保護符功能,格式為:{? #ifndef 預處理變量(通常大寫)? ? ? ? ?#define? 預處理變量? ? ?#endif },多使用預處理的功能可以增強代碼的魯棒性和移植能力,但是增加了代碼的理解能力。

? ? ? ? ?預處理變量無視C++語言中的作用域規則,它是在程序預處理階段將程序中的所有預處理變量用實際的變量來進行替代。另外如果使用上述格式的預處理功能定義了預處理變量,則后面的程序中如果遇到預處理變量,則可以避免重復定義。

2.string初始化和字符操作

? ? ? ? ? string是C++語言中定義的一種復雜數據類型(可變長字符串),它的初始化方式可以分為兩種,一種是利用“=”操作的拷貝初始化,另外一種是利用構造函數完成直接初始化。

? ? ? ? ? 拷貝初始化方式:string s2=s1;? string s3="value"(拷貝字符串除最后一個字符的所有字符給字符串s3);’

? ? ? ? ? 直接初始化:string s4(s2),? string s5("value"),? string s6(n,'c');

? ? ? ? ? string提供一個size函數,返回string對象的大小,它的數據類型為一個string::size_type,為一個用typedef定義的變量。

? ? ? ? ? 標準庫允許將string對象和string對象或string對象和字面值常量進行運算(字面值常量可以轉換為string對象),但是不允許加號兩邊都是字面值常量。

? ? ? ? ? C++11提供一種范圍for語句來對string對象中的每一個字符才做,結合cctype(兼容C中的ctype.h文件,C++繼承C中的文件只是將C中的頭文件刪去.h后綴,同時在前面添加一個c)中的字符處理和判斷函數,就能完成對string對象中的字符處理。使用for循環修改string對象,需要定義字符引用。cctype中的處理字符的函數:

? ? ? ? ? isalnum(c):c是字母或者數字為真;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?islower(c):c為小寫為真;

? ? ? ? ? isalpha(c):c是字母為真;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??isupper(c):c為大寫為真;

? ? ? ? ? isdigit(c):c是數字為真;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tolower(c):c為大寫時轉小寫,否則不變;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ispunct(c):c是標點符號為真;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?toupper(c):c為小寫時轉大寫,否則不變;

? ? ? ? ? isspace(c):c是空格為真;

? ? ? ? ? string支持[ ]操作符,可以使用[ ]訪問string中的任意字符,但是必須保證其中的數值在0~string.size()之間,否則會產生數據越界的現象。

3.vector初始化和迭代器

? ? ? ? ? vector是C++語言定義的一個類模板,而不是一種類型,是一個可變長的向量。vector的初始化方式有三種:拷貝初始化,直接初始化和初始化列表的方式。拷貝初始化通常與賦值與賦值運算符“=”有關,如vector<int> v2=v1,直接初始化是采用初始化函數,如vector<int> v3(n,val);vector<int> v4(v3);vector<int> v5(n),初始化列表是采用花括號的方式,如vector<int> v6{1,3,5}或vector<int> v7={1,3,5};

? ? ? ? ? 如果vector的初始化中只提供容器中元素的數量,不提供初始值,則容器中的初始值會執行默認的初始化。如果沒有默認的初始化值,則容器創建失敗。如果在使用花括號列表初始化容器時,但是花括號中的值不能用來列表初始化,則考慮用這樣的值來構造vector對象,如vector<string> v8{10,"hi"}(v8中有10個“hi”的字符串)

? ? ? ? ? vector中定義了一個size函數來定義容器中元素的個數,數據類型為vector<int>::size_type.vector可以使用下標來訪問已存在的對象,但不能利用下標來添加對象(可以采用范圍for語句來確定下標是否合法)。

? ? ? ? ? vector中定義了一種begin和end兩種迭代器,迭代器的類型為vector<int>::iterator.C++11中增加了兩個迭代器cbegin和cend,對應的迭代器類型為vector<int>::const_iterator.

? ? ? ? ? 對于vector中定義的迭代器,如果期間vector中的值發生增加或者減少,則所定義的迭代失效。vector和string支持迭代器加減運算,迭代器加減一個整形得到的仍為一個迭代器(注意不能越界,begin,end),兩個迭代器相減,得到一個名字為difference_type的有符號整形。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382274.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382274.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382274.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《C++ Primer 第五版》(第3.5-3.6節) ——C++中的內置數組類型,string對象和C風格字符串

1.C中的內置數組類型 C中的數組是內置數據類型&#xff0c;但不是基礎數據類型而是構造數據類型&#xff0c;是有限個相同數據、占據著連續物理存儲空間的有序集合。而內置數據類型定義的下標運算符可以處理負值運算(只要在數組范圍之內)&#xff0c;這和vector及string的下標運…

793. 階乘函數后K個零 golang

Me(AC 33 / 44 個通過測試用例) func preimageSizeFZF(K int) int {count : 0for i : 0; i < 1000000; i {if trailingZeroes(i) K {count}}fmt.Println(count)//fmt.Println(trailingZeroes(25))return count}func trailingZeroes(n int) int {if n 0 {return 0}return …

小程序radio單選框回顯

話不多說&#xff0c;效果圖如下&#xff1a; 具體代碼如下&#xff1a; <radio-group name"radio" bindchange"getSex"><label><radio value"1" checked"{{xingbie1}}" />男</label><label><radio…

172. 階乘后的零 golang

官解 一般很難想到這個方向&#xff0c;有點類似數學歸納法&#xff1f; func trailingZeroes(n int) int {if n 0 {return 0}return trailingZeroes(n / 5) n / 5 }

《C++ Primer 第五版》(第4.11節類型轉換) ————關于無符號數和有符號數的運算探究

1.關于無符號數和有符號數的運算 關于無符號數和有符號數的運算&#xff0c;在我看來一直是覺得只要有無符號數和有符號數的運算&#xff0c;有符號數就轉化為無符號數&#xff0c;但是在《C Primer 第五版》的p142介紹&#xff0c;關于無符號數和有符號數的運算如下規定的&…

《C++ Primer 第五版》(第4.1-4.11節) ——運算符的執行順序問題,負值坐商取余問題,數值的移位操作

1.運算符的執行順序問題 在C語言中&#xff0c;沒有明確規定大多數二元運算符的求值順序&#xff0c;這給編譯器留下了余地&#xff0c;這種策略是在代碼生成效率和程序潛在缺陷之間的權衡。 對于運算符而言&#xff0c;如果運算符的兩個對象中&#xff0c;存在表達式指向并修改…

543. 二叉樹的直徑 golang

文章目錄543. 二叉樹的直徑example正確解法question代碼&#xff08;wrong)543. 二叉樹的直徑 概要: 借鑒了這個題的代碼。可是有一個測試用例過不去 https://blog.csdn.net/csdn_kou/article/details/104122067 example 給定一棵二叉樹&#xff0c;你需要計算它的直徑長度。一…

《C++ Primer 第五版》(第4.11-4.12節)——static_cast,const_cast和reinterpret_cast類型轉換, 運算符優先級表

1.static_cast,const_cast和reinterpret_cast類型轉換 static_cast:強制的類型轉換(不能用于底層的const轉換),以前C語言中的強制類型轉換都可以使用static_cast來完成。如&#xff1a;int i3; double jstatic_cast<double>(i); const_cast&#xff1a;改變底層const(指針…

《C++ Primer 第五版》(第5.1-5.6節) ——異常處理機制(try語句塊,throw表達式和catch異常捕捉處理單元)

1. 異常處理機制 C中使用try,throw和catch三個關鍵字來實現異常的觸發、拋出和處理的功能&#xff0c;具體通用語法形式如下&#xff1a; try{ if(true) normal program-statements&#xff1b;//沒有觸發異常時候執行的代碼 if(false) throw(exception); //出現錯誤&am…

《C++ Primer 第五版》(第6.1~6.3節) 函數形參和實參傳遞,可變參數列表和函數返回值

1.函數形參和實參傳遞問題 函數參數傳遞有兩種&#xff1a;值傳遞(變量&#xff0c;指針&#xff09;,引用傳遞(使用別名&#xff09;。 在形參和實參的傳遞過程中&#xff0c;牽涉到大的類類型對象、容器類型對象或者不支持拷貝操作的對象時&#xff0c;不適合采用值傳遞&…

461. 漢明距離 golang

Me 異或取出1的個數求取異或后1的個數返回 func hammingDistance(x int, y int) int {x x ^ yvar count 0for x ! 0 {x x & (x - 1)count}return count }

《C++ Primer 第五版》(第6.3~6.7節)——返回指向數組/函數的指針,函數重載,默認形參、inline函數和constexpr函數

1.返回指向數組/函數的指針 顧名思義&#xff0c;就是函數返回值為指向數組/函數的指針。 數組的性質&#xff1a;不能被拷貝&#xff0c;函數也不能返回數組。但可以返回數組指針/引用&#xff0c;聲明一個返回數組指針的函數&#xff0c;有四種方式&#xff0c;一種是直接聲明…

136. 只出現一次的數字 golang

Me 1. 先排序就好做了 執行用時 :16 ms, 在所有 Go 提交中擊敗了27.90%的用戶 內存消耗 :4.7 MB, 在所有 Go 提交中擊敗了100.00%的用戶func singleNumber(nums []int) int {sort.Ints(nums)for i:0; i < len(nums); i {if i len(nums) - 1 {return nums[i]}if nums[i] …

《C++ Primer 第五版》(第1~6章總結)

1.C采用標準庫文件iostream定義的兩個對象來實現IO機制。 2.代碼注釋應解釋關鍵數據的變量含義和代碼完成了什么功能&#xff0c;力求簡潔易懂。 3.正確理解初始化和賦值&#xff0c;聲明和定義的含義&#xff1f;初始化是在定義對象的時候同時賦值&#xff0c;賦值是定義對象…

268. 缺失數字 golang

Me 首項加末項乘以項數/2.就是總和。然后剪掉nums里面的數組和 func missingNumber(nums []int) int {var sum intlens : len(nums)for _, value : range nums {sum value}return ((1 lens) * lens) / 2 - sum }

使用touch更新文件的時間

#&#xff01;/bin/bashfunction read_dir() {for file in ls $1doif[-d $1"/"$file]thenread_dir $1"/"$fileelseecho $1"/"$filetouch $1"/"$filefidone }read_dir ./

231. 2的冪 golang

Me func isPowerOfTwo(n int) bool {return n > 0 && (n & (n-1)) 0 }

linux/windows上STM32固件燒寫工具的開發demo

1.主要實現功能&#xff1a;完成對HEX和DFU文件的燒寫&#xff0c;顯示燒寫的進度等功能 2.開發工具:Qt creator4.9.0 3.開發系統平臺&#xff1a;windows系統和linux系統兩套平臺 4.具體開發步驟&#xff1a; 1&#xff09;設計整體的界面&#xff0c;包括文件選擇界面(dfu和h…

338. 比特位計數 golang

Me func countBits(num int) []int {result : make([]int, num1)for i:0; i<num; i {result[i] numberOne(i)}return result }func numberOne(x int) int {if x 0 {return 0}var count intfor x ! 0 {x x & (x - 1)count}return count }

Qt使用qss文件管理stylesheet

內容總結簡介&#xff1a; 1&#xff09;使用.qss后綴的文件來管理Qt中每個類的具體組件的stylesheet設置。 2&#xff09;在類中使用具體.qss文件中的設置。 3&#xff09;解決控件中多個相同組件不同設置或者同一個控制不同子控制或者偽狀態的問題。 1.新建后綴名為.qss的文…