Essential C++ 1.5-1.6節,3.1節筆記
Array/Vector/指針,難度偏大,
但若學習初期不熟悉基本用法,則難以寫出有效代碼。
指針可以進行自增(++), 自減(--), 加上一個整數(+, +=), 減去一個整數(-, -=)等算術運算。
在數組中使用頻繁。
指針存的是內存地址,+/- 1 時,並非簡單地加上或減去該整數值,而是加上該整數與指針引用的對象的大小的乘積。
這種實現方式的好處是,方便template模板編程。例如:ptr 指向數組的某個元素,ptr+1 就是下一個元素的地址(如果沒有越界的話)。
int 的長度是 4,int型指針+1,內存地址+4.
double 的長度是 8,double 型指針+1,內存地址+8.
代碼和執行結果如下:
View Code執行結果:
2. 定義 Array 時,尺度必須是常量表達式,建議使用 const 變量。
3. Vector 知道自己的大小,Array 卻不知道。個人理解:
4. Vector 不能像 Array 一樣一次初始化多個變量(用{}括起),因為 Vector 是自定義 class,語法不支持。
Array 為何可以?
1. 指針的算術運算
練習1.5
撰寫一個程序,使之能夠詢問用戶姓名,並讀取用戶所輸入的內容。
請確保用戶輸入的名稱長度大於兩個字符。如果用戶的確輸入了有效信息,就響應一些信息。
練習1.5 使用 C-style 字符串 練習1.5 使用 String 對象
練習1.6
撰寫一個程序,從標准輸入裝置讀取一串整數,並將讀入的整數依次置入 array 及 vector。
然後遍歷這兩種容器,求取數值總和,將總和及平均值輸出至標准輸出裝置。
分析:
1. 讀取一串整數,可選擇以字符串形式接收,或一個數字。
後者容易導致數據溢出,且需要反復轉換數據類型。
2. char 轉 int,直接減去 ASCII 的差值(48)即可。
3. 求和時,如果 Array 長度大於輸入數字的個數,則無需遍歷整個 Array 求和。
4. 求平均值時,不能直接用 int 除以 int。
Array 式的 Vector