3.1 命名空間的using聲明
- using聲明:每個using聲明引入命名空間的一個成員掷酗;頭文件中的代碼一般不應使用using聲明(或者直接加一句 using std::std 表示引用整個命名空間的名字)剪撬。
3.2 標準庫類型string
- 標準庫類型string 表示可變長的字符序列。
3.2.1 定義和初始化string 對象
- string初始化:用數(shù)字和字符初始化歹袁,則string對象內容是將給定字符連續(xù)重復給定次數(shù)得到的序列。
- 直接初始化和拷貝初始化:使用等號(=) 的是拷貝初始化寝优,它的的是直接初始化条舔。
3.2.2 string 對象上的操作
- getline:從輸入流中讀入內容直到讀入換行符,保留空白符乏矾,但換行符不存入string對象中孟抗。
- string::size_type:由于size返回的是一個無符號整型數(shù),因此切記钻心,如果在表達式中混用了帶符號數(shù)和無符號數(shù)將可能產生意想不到的結果凄硼。
假設n是一個具有負值的int,則表達式 s.size()<n的判斷結果幾乎肯定是true捷沸。因為負值n會自動轉換成一個比較大的無符號值摊沉。 - 字面值與string:字符字面值和字符串字面值可以轉化為string對象,相加時加號兩側的運算對象至少有一個是string型痒给。
3.3 標準庫類型vector
- 標準庫類型vector表示對象的集合说墨,也稱為容器骏全。其中所有對象的類型都相同。集合中的每個對象都有一個與之對應的索引婉刀,索引用于訪問對象吟温。
- 實例化:根據(jù)模版創(chuàng)建類或函數(shù)的過程,必須指明實例化成何種類型突颊。不存在包含引用的vector鲁豪。
3.3.1 定義和初始化vector對象
- c++語言提供的初始化方式大多數(shù)情況下都是可以互相等價的使用。但也有例外:
a:使用拷貝初始化時(即使用=時)只能提供一個初始值律秃;
b:如果提供的是一個類內初始值爬橡,則只能使用拷貝初始化或者花括號初始化;
c:如果提供的是初始元素值的列表棒动,則只能使用花括號進行初始化列表糙申;
例:vector<int> ivec(10) //10個元素,每個都是初始化為0
vector<int> ivec{10} //1個元素船惨,該元素的值是10
總而言之:花括號{} 用來列表初始化柜裸,弧括號()用來指定元素個數(shù)的初始化。
3.4 迭代器介紹
迭代器是一種訪問容器元素的方式或工具粱锐,功能與下標類似疙挺。
3.4.1 使用迭代器
- 迭代器成員:begin和end運算符的具體類型由對象是否是常量決定,cbegin和cend始終得到const_iterator怜浅。(一般來說铐然,我們不清楚也不在意迭代器準確的類型到底是什么)
- 箭頭運算符(->):把解引用和成員訪問兩個操作結合在一起。it->mem和(*it).mem表達的意思相同恶座。
3.4.2 迭代器運算
- 迭代器算術運算:兩個迭代器搀暑,指向同一容器中的元素或尾元素的下一位置,比較的是位置的前后跨琳;相減得到different_type型的有符號整數(shù)自点,表示兩個迭代器的距離。
3.5 數(shù)組
3.5.1 定義和初始化內置數(shù)組
- 定義數(shù)組:數(shù)組是一種符合類型脉让,必須指定數(shù)組類型樟氢,不能使用auto由初始值推斷;類型不能是引用侠鳄。
- 字符數(shù)組:可以使用字符串字面型初始化,數(shù)組中需要空間放空字符死宣。
- 復雜數(shù)組聲明:從數(shù)組名字開始按照由內向外的順序閱讀伟恶,如int *(&a)[10]表示a是對數(shù)組引用,該數(shù)組包含10個int*毅该。
3.5.3 指針和數(shù)組
- 數(shù)組特性:很多用到數(shù)組的地方博秫,編譯器都會自動的將其替換為一個指向數(shù)組首元素的指針潦牛。(必須指出,當使用decltype關鍵字時上述轉換不會發(fā)生)
- 首指針和尾后指針:使用標準庫函數(shù)begin()和end()可以得到數(shù)組的首指針和尾后指針挡育;提供這兩個指針可以將數(shù)組拷貝初始化vector對象巴碗;尾后指針不指向具體元素,不能解引用或遞增即寒。
- 指針比較:只要兩個指針指向同一個數(shù)組的元素或尾元素下一個位置橡淆,就能用關系運算符比較前后;兩個指針相減的結果類型是有符號類型ptrdiff_t母赵。
- 小標和指針:標準庫類型限定下標必須是無符號類型逸爵,而內置的下標運算無此要求。
3.5.5 與舊代碼的接口
- string轉char*:s.c_str()函數(shù)將string對象s凹嘲,轉化為一個C風格的字符串师倔,但無法避免s改變后之前返回的字符串失去效用
3.6 多維數(shù)組
- 多維數(shù)組初始化:使用花括號的形式,未列出的元素執(zhí)行默認值初始化周蹭。
- 范圍for處理多維數(shù)組:除最內層循環(huán)外趋艘,其他所有循環(huán)的控制變量都應該是引用類型,以避免這些數(shù)組形式的元素被自動轉換成指向數(shù)組首元素的指針凶朗。
- 多維數(shù)組指針:多維數(shù)組的指針是指向內層數(shù)組的指針瓷胧;避免指針類型混淆可使用auto或decltype,begin()和end()俱尼,類型別名簡化多維數(shù)組的指針抖单。