C Primer 學習筆記(四)

2021-09-18 07:38:44 字數 3116 閱讀 9032

2019年4月16日

3.9.1多維陣列

我們可以定義多維陣列。每一維用乙個方括號對來指定,例如:int ia[4][3];

關於多維陣列的初始化。為了索引到乙個多維陣列中,每一維都需要乙個方括號對,不然意義就會發生變化。

在c++中,多維陣列的索引訪問要求對程式設計師希望訪問的每個索引都有一對方括號。

3.9.2 陣列與指標型別的關係

陣列識別符號代表陣列中的第乙個元素的位址,它的型別是陣列元素型別的指標。注意*ia+1; 與*(ia+1)表示式完全不同,解引用操作符比加法運算子的優先順序高,所以它先被計算。解引用ia將返回陣列的第乙個元素的值,然後對其加1。如果在表示式裡加上括號,那麼ia將先被加1,然後解引用新的位址值。對ia加1將使ia增加其元素型別的大小,ia+1指向陣列中的下乙個元素。

陣列元素遍歷則可以通過下表操作符來實現,或者我們也可以通過直接操作指標來實現陣列元素遍歷。

泛型程式設計:

#includeusing namespace std;

templatevoid print(elemtype *obegin,elemtype *pend)

}

現在我們可以給通用的函式printf()函式傳遞一對指向任意型別陣列的指標,只要該型別的輸出操作符已經被定義即可,例如:

int main()

;      double da[4] = ;

string sa[3] = ;

print(ia,ia+9);

print(da,da+4);

string(sa, sa+3);

}

標準庫提供了一組泛型演算法,它們通過-一對標記元素的範圍的開始/結束指標來遍歷其中的元素。例如,我們可以如下呼叫泛型演算法sort();

#includeint main()

;string sa[3] = ;

sort(ia,ia+6);

sort(sa,sa+3);

}

3.10vector容器類

vector類是隨標準c++引入的標準庫的一部分,使用時候必須包含其他檔案#include。

我們可以用size()查詢vector的大小,也可以用empty()測試它是否為空。vector的元素被初始化為與其型別相關的預設值,算術和指標型別的預設值為0,對於class型別,預設值可以通過呼叫這類的預設建構函式獲得。我們還可以為每個元素提供乙個顯示的初始值來完成初始化。例如:

vectorivec(10.-1);//十個元素,每個元素都被初始化為-1;

vector操作符中begin()和end()所返回的迭代器(iterator)使用比較多:

例如:  

string word;

for(vector::iterator it = text.begin();

it != text.end(); ++it)

cout<<*it<<『 』;

cout《注意:任何乙個插入的操作都是將增加vector的大小,而不是覆蓋掉某個現有的元素,如下面**:

const int size = 7;

int ia[ size ] = ;

vector< int > ivec( size );

for ( int ix = 0; ix < size; ++ix )

ivec.push_back( ia[ ix ]);

程式結束時ivec包含了14個元素,ia的元素從第八個元素開始插入。

3.11 複數型別

每個複數都有兩個部分:實數部分和虛數部分。敘述代表負數的平方根,這個術語是由笛卡兒首創的。

虛數的定義:

complexpurei(0,7);// 0+7i

complexreal_num(3);// 3+0i

complexzero;//0+0i

complexpurei2(purei);//用另乙個複數物件來初始化乙個複數物件

compledconjugate[2] =

;//宣告複數物件的陣列

3.12typedef名字

typedef機制為我們提供了一種通用的型別定義設施,可以用來為內建的或使用者定義的資料型別引入助記符號。

typedef 定義關鍵字typedef開始,後面是資料型別和識別符號。這裡的識別符號即typedef名字,並沒有引入一種新的型別,而只有為現有型別引入了乙個助記符號。typedef名字對以出現在任型別名出現的地方。

typedef名字可以被用作程式文件的附註說明,他也能夠降低宣告的複雜度。注意如果定義:

typedef char* cstring;

extern const cstring cstr;

cstr的型別為 char *const cstr; 而不是const char *cstr;

3.13 volatile限定修飾符

當乙個物件的值可能會在編譯器的控制或監測之外被改變時候,例如乙個被系統時鐘更新的變數,那麼該物件應該宣告成volatile。因此,編譯器執行的某些例行優化行為不能應用已指定為volatile的物件上。

volatile修飾符的主要目的是提示編譯器,該物件可能在編譯器未監測到的情況下被改變。因此編譯器不能武斷地對引用這些物件的**作優化處理。

3.14pair型別

pair類也是標準庫的一部分,它使得我們可以在單個物件內部把相同型別或不同型別的兩個值關聯起來。

例如:pairauthor(「james」,」joyce」);

我們可以用成員訪問符號(member access notation)訪問pair中的單個元素,為first和second。

3.15類型別

類的定義由關鍵字class開始,後面是乙個識別符號,該識別符號也被用作類的型別指示符,如complex、vector及array等等。一般地,乙個包括公有的(public)操作部分和私有的(private)資料部分。這些操作被稱為類的成員函式(member function)或方法(method)他們定義了類的公有介面(public inte***ce)--即,使用者可以在該類物件上執行的操作的集合。

c primer 學習(四) 函式

之所以跳過了原書第五章的 語句 是因為這個東西實在沒啥意思,只要學過一點c,或者任何程式語言的應該都會,要說知識只有一點,就是後邊的異常處理,不過這個在後邊章節也要詳細講,只要記住乙個try catch error 就可以了。但是第五章的題都是不錯的,建議大家乙個個做一下,其實感覺c primer的...

C Primer學習筆記

學習完乙個知識點後寫上自己的理解。算是總結吧,加深一下自己的印象,也可以在以後複習的時候方便檢視 加油加油!14.1關於運算子的過載 存在的意義 目前看來就是因為操作符大部分是針對資料的,比如int型,char型,書中稱為內建型別。而當類之間想要用操作符的時候,比如兩個類的物件相加,那麼就需要去重 ...

《C Primer》學習筆記

2008年7月18日 颱風海鷗登陸 1 宣告與定義 變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義。變數的宣告用於向程式表明變數的型別和名字。變數的宣告包括物件名 物件型別和物件型別前的關鍵字extern 當設計標頭檔案時,記住定義和宣告的區別是很重要的...