C++primer 第五版 *筆記二 [渣渣進化記]

【第三章】字符串、向量、數組

1、標準庫類型string

初始化:(兩種之前不熟悉的方式)  直接初始化。拷貝初始化是使用 =

string s1("value") ;  
string s2(n, 'c');

string 的操作

getline(is, s)  //從is中讀取一行給s
s.empty()    //s爲空返回true
s.size()    //返回s中字符的個數

·讀取string對象 從第一個真正的字符讀取,遇到空白就停止

·string 的size操作   size()函數 返回的類型是string::size_type,是無符號整型數,所以表達式中有了size()函數就不要用int了,避免混用int和unsigned可能帶來的問題

·字面值和string對象相加,+兩側至少一個是string

string s4 = s1 + ", "; //正確
string s5 = "hello" + ", ";//錯
string s6 = s1 + ", " + "wold";//正確
string s7 = "hello" + ", " + s2;//錯誤

(注意運算的順序)

二、vector

初始化vector<int>時 圓括號 和 花括號

vector<int> v1(10);// v1有10個元素,值爲0
vector<int> v2{10};//v2有1個元素,值爲10

初始化vector<string>時

vector<string> v3{10};//v3有10個默認初始化元素
vector<string> v4{10, "hi"};//v4有10個值爲hi的元素

·向vector對象中添加元素

先創建一個空的vector在利用vector的成員函數push_back()添加元素
vector的下標運算符可訪問已經存在的元素,但不能用於添加元素

三、迭代器

·迭代器成員:如果容器爲空,begin 和 end返回同一個迭代器

begin()   返回指向第一個元素

end()    尾元素下一個位置(不能對end進行遞增和遞減,因爲不實際指向某個元素)

·迭代器類型:

iterator    讀寫

const_iterator  只讀

begin 和 end 返回的類型由對象是否是常量決定

新標準引入兩個新函數,爲便於專門得到const_iterator類型的返回值: cbegin  和 cend

·兩個迭代器指向的是同一容器的元素或者尾元素的下一位置,則相減後的其距離,類型名爲difference_type

四、數組

·字符串數組,注意結尾有1個位置存放空字符串,顯示空字符串爲 \0

·理解複雜數組從內往外

·使用數組下標時,定義爲size_t類型

·兩個指針相減結果也是其距離,結果類型爲 ptrdiff_t

(數組這坨還算比較清楚一點,跳的就比較快了,真心感覺看不完呢…難過…加速加速!剛看了下目錄,到八章開始對我來說都是些全新的東西,那坨才該是細看的,還剩4章火速看了!!)


【第四章】表達式

·使用++i  --i 而不用 i++ i--的原因 :

前置版本把值加1後直接返回改變了的運算對象

後置版本需要將原始值存儲下來以便於返回這個未修改的內容

·顯式轉換 命名的去強制類型轉換

cast-name<type>(expression)

type:轉換目標的類型

expression:要轉換的值

cast-name:

·static_cast:任何有明確定義的類型轉換,只要不包含底層const,都可以用

                      對編譯器無法自動執行的類型轉換也非常有用,如void*指針

·dynamic_cast:支持運行時類型識別

·const_cast:只能改變底層const,可將常量對象轉換爲非常量(去掉const性質

                      若對象本身不是常量,則強制類型轉換獲得寫權限 合法

                      若對象是常量,則用const_cast 執行寫操作會產生未定義後果

·reinterpret_cast:使用很危險……



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章