第三章 字串 向量和陣列

2021-06-29 05:41:23 字數 1503 閱讀 4981

標頭檔案不應包含using宣告。

c++標準一方面對庫型別所提供的操作做了詳細規定,另一方面也對庫的實現者做出了一些效能上的需求。因此,標準庫型別對於一般應用場合來說有足夠的效率。

如果使用等號(=)初始化乙個變數,實際上執行的是拷貝初始化(copy initialization),編譯器把等號右側的初始值拷貝到新建立的物件中去。與之相反,如過不使用等號,則執行的是直接初始化(direct initialization)。

getline函式從給定的輸入流中讀入內容,知道遇到換行符為止(注意換行符也讀進來了),然後把所讀的內容存入到那個string物件中去(注意不存換行符)。

string::size()函式返回的是乙個string::size_type型別的值。

"hello"<"hello world"。

由於某些歷史原因,也為了與c相容,所以c++語言中的字串字面值並不是標準庫型別string的物件。切記,字串字面值與string是不同的型別。

確保下標合法的一種有效手段就是盡可能使用範圍for語句。

如果容器為空,begin和end返回的是同乙個迭代器,都是尾後迭代器。

迭代器這個名詞有三種不同的含義:可能是迭代器概念本身,也可能是指容器定義的迭代器型別,還可能是指某個迭代器物件。

雖然vector物件可以動態地增長,但是也會有一些***。已知的乙個限制是不能在範圍for迴圈中向vector物件新增元素。另外乙個限制是任何一種可能改變vector物件容量的操作,比如push_back,都會使該vector物件的迭代器失效。

和vector一樣,陣列的元素應為物件,因此不存在引用的陣列。

要想防止陣列下標越界,除了小心謹慎注意細節以及對**進行徹底的測試之外,沒有其他好辦法。

當使用陣列作為乙個auto變數的初始值時,推斷得到的型別是指標而非陣列。當使用decltype關鍵字時轉換不會發生,返回的型別是陣列。

標準庫型別限定使用的下標必須是無符號型別,而內建的下標運算無此要求。

int a = ;

int *p = &a[2]; // p指向索引為2的元素

int k = p[-2]; // p[-2]是a[0]表示的那個元素

儘管c++支援c風格字串,但在c++程式中最好還是不要使用它們。這是因為c風格字串不僅使用起來不太方便,而且極易引發程式漏洞,是諸多問題的根本原因。對大多數應用來說,使用標準庫string要比使用c風格字串更安全、更高效。

如果執行完string::c_str()函式後程式想一直都能使用其返回的陣列,最好將該陣列重新拷貝乙份。

現代的c++程式應盡量使用vector和迭代器,避免使用內建陣列和指標;應該盡量使用string,避免使用c風格的基於陣列的字串。

要使用範圍for語句處理多維陣列,除了最內層的迴圈外,其他所有迴圈的控制變數都應該是引用型別,否則會被系統自動轉換為指標型別。

c風格字串(c-style string),以空字元結束的字元陣列。

第三章 字串 向量和陣列

1 以命名空間std為例,兩種宣告方式 1 using std cin 或cout,endl等 2 using namespace std 2 標頭檔案中不應包含using宣告。1 初始化的方式分為拷貝初始化 使用等號 與直接初始化 不使用等號 1 使用getline讀取一整行 直接讀只會讀乙個單詞...

第三章 字串 向量和陣列

標頭檔案 include string定義和初始化 string s1 string s1 s2 string s1 hello string s1 hello string s1 n,c string物件的操作 cin s1 cout cin,s1 s.empty s.size s n s1 s2...

第三章字串 向量和陣列

3.2標準庫型別 string 練習3.5編寫一段程式從標準輸入中讀入多個字串並用空格分隔開 include include using std string using std cin using std cout using std endl intmain cout the concatena...