1. 程式人生 > >《Accelerated C++》筆記(1~3)

《Accelerated C++》筆記(1~3)

第0章 開始學C++

//C0

#include <iostream>

int main()

{

std::cout<<"Hello,World!"<<endl;

return 0;

}

0.1 註釋

0.2 #include指令

C++中有許多基本工具,例如輸入輸出,但其都不屬於語言核心,而是在標準庫中,因此需要使用#include指令指明使用的標準庫。

0.3 主函式main

函式是一段具有名稱的程式,程式其它部分可以呼叫函式或使之執行。每個C++程式都必須包含一個名為main的函式。main函式需要返回一個整數型別的值作為結果,來告知編譯器其是否執行成功,0表示成功。

0.4 花括號

花括號告訴編譯器,其之間的內容作為一個單元處理。

0.5 使用標準庫進行輸出

0.6 返回語句

0.7 一些較為深入的觀察

表示式會讓編譯器進行運算,產生結果的同事可能具有副作用。表示式含有運算元與運算子。每一個運算元具有相應型別。運算子具有優先順序與結合性保證運算順序。

例如標準的輸出std::cout<<"Hello,World!"<<std::endl;<<運算子是左結合,endl是一個控制器。控制輸出的形式。std::cout是一個限定名稱,::運算子是作用域解析符。

0.8 小結

型別:定義了資料結構以及這些資料結構的操作。

名字空間:將有相關的名稱聚集在一起。

字串直接量:從雙引號開始結束於雙引號。

定義與標頭檔案

主函式

花括號與分號

輸出

第1章 使用字串

//C1

#include <iostream>

#include <string>

int main()

{

std::cout<<"Please enter your first name:";

std::string name;

std::cin>>name;

std::cout<<"Hello,"<<name<<"!"<<std::endl;

return 0;

}

1.1 輸入

為了讀取輸入,需要有對應的存放空間,而這樣的空間即為變數。變數是一個具有名稱的物件,物件是計算機中一段具有型別的記憶體空間。

std::string name;是一個定義,而這個定義存在於函式體內,因此name是一個區域性變數,在對應的單元執行結束後被銷燬。在定義的同事,string型別對name進行了隱式的初始化,因為標準庫妖氣每個string物件都有一個初始化值。而隱式初始化後的name為一個空字串。預設初始化取決於變數的型別。

隱含在物件型別中的還有其介面,即該型別物件可以實現的操作集合。

在使用cin時,會首先略去輸入開始時碰到的空白字元,然後連續地讀取,直到遇到了另一個空白字元或檔案結束標記為止。(如果想輸入帶有空格的字串,可以考慮使用getline())。

輸入操作有一個副作用,即產生一個出現在計算機輸出裝置的提示。一般來說,輸入/輸出庫會將字元儲存在緩衝區。在有必要時才會將緩衝區內容寫入輸出裝置從而重新整理緩衝區。引起緩衝區重新整理的事件有三種:緩衝區滿了;請求庫從標準輸入流中讀資料;人為控制進行重新整理。

1.2 為姓名裝框

字串與字串直接量具有不同型別。

可以使用+將字串與字串直接量連線起來,在此過程中發生了型別的轉換。

const,用來表示常量的關鍵字,可以作為變數定義的一部分。如果定義一個變數為常量,需要在定義時對其初始化,否則之後再無法對其進行修改操作。

構造

成員變數

字元直接量

1.3 小結

型別:char內建型別,儲存由系統環境定義的普通字元;wchar_t內建型別,儲存寬字元,例如日語。

變數

第2章 迴圈與計數

while語句

while(condition) statement statement既可以是單獨的語句也可以是語句塊。while開始時先測試其條件,再根據條件真假繼續執行下面的程式。

邏輯運算子

for迴圈

for(init-statement condition;expression) statement

if語句

第3章 使用批量資料

#include <iostream>

#include <iomanip>

#include <ios>

#include <string>



using std::cin;

using std::cout;

using std::endl;

using std::precision;



int main()

{

cout<<"Please enter your first name:";

string name;

cin>>name;

cout<<"Hello,"<<name<<"!"<<endl;

cout<<"Please enter your midterm and final exam grades:";

double midterm,final;

cin>>midterm>>final;

cout<<"Enter all your homework grades,"

"followed by end-of-file:";

int count = 0;

double sun = 0;

double x;

while(cin>>x)

{

++count;

sun+=x;

}

streamsize presc=cout.precision();

cout<<"Your final grade is"<<setprecision(3)

<<0.2*midterm+0.4*final+0.4*sum/count

<<setprecision(prec)<<endl;

return 0;

}

標頭檔案<ios> 定義了sreamsize型別,表示輸入輸出庫的長度型別。<iomanip>定義了控制器setprecision。可以指明輸出包含的有效位數。

3.3.1 檢測輸入

while(cin>>x){/*...*/}

3.2.1 把資料集合儲存在向量中 vector 模板類

3.2.2 產生輸出 使用語言工具typedef為特定型別產生一個自定義的替代名

3.2.3 一些更為深入的觀察

所有標準庫長度型別一樣。

普通整數與無符號整數在表示式中結合在一起時,普通整數會被轉換成無符號整數。

C++標準對庫的執行效能要求很高,例如vector,在vector後面新增大量元素是,其效能不會隨元素數量增加而成比例惡化;以不低於nlog(n)的速度實現排序演算法。