第三章 多維陣列專題

2021-09-18 03:05:02 字數 2967 閱讀 2887

一、編寫一段程式,用整形陣列初始化乙個vector物件。

#include #include #include using namespace std;

int main()

;vectorv1(a, a + 10);

for (int i = 0; i < 10; i++)

}

二、編寫一段程式,將含有整數元素的vector物件拷貝給乙個整型陣列。

#include #include #include using namespace std;

int main()

}

三、多維陣列

(1)嚴格意義上講,c++語言沒有多維陣列,通常所說的陣列其實是陣列的陣列。

(2)當乙個陣列的元素仍然是陣列時,通常使用兩個維度來定義它:乙個維度表示陣列本身的大小,另外乙個維度表示其元素(也是陣列大小):

例子:int ia [3] [4];     //它定義了乙個大小為3的陣列,該陣列的每個元素是含有4個整數的陣列。
(3)多維陣列的初始化

第一種方式: int ia[3] [4] = ,,};

第二種方式:int ia[3] [4]=;(我們一般習慣的用法)

(4)多維陣列中我們僅僅想初始化每一行的第乙個元素

int ia [3] [4]=,,[8}};

int ix [3] [4] = ;

這個時候如果去掉花括號結果就不一樣了,這裡的含義為:它初始化的第一行的4個元素,其它元素別初始化為0。

(5)定義指向多維陣列的指標時,千萬不要忘記這個多維陣列實際上時陣列的陣列。

例子: int ia [3] [4];     //大小為3的陣列,每個元素是含有4個整數的陣列

int (*p) [4] = ia; //p指向含有4個整數的陣列

p=&ia [2]; //p指向ia的尾元素

因此:p就是指向含有4個整數的陣列的指標

四、習題答案:

(1)編寫三個不同版本的程式,令其均能輸出ia的元素,版本一是使用範圍for語句管理迭代過程;版本二和版本三是使用普通的for語句,其中版本2要求用下邊運算子,版本3要求用指標,三種版本要求都要直接寫出資料型別,而不能使用型別別名,auto關鍵字,或者是decltype關鍵字。

#include #include using namespace std;

int main()

;for (const int(&p)[4] : ia)

for (int q : p) cout << q << " ";

cout << endl;

for (size_t i = 0; i != 3; ++i)

for (size_t j = 0; j != 4; ++j) cout << ia[i][j] << " ";

cout << endl;

for (int(*p)[4] = ia; p != ia + 3; ++p)

for (int* q = *p; q != *p + 4; ++q) cout << *q << " ";

cout << endl;

system("pause");

return 0;

}

(2)改寫上乙個練習中的程式,使用型別別名來替代迴圈控制變數的型別。

#include #include using namespace std;

int main()

;using int_array = int[4];

for (int_array& p : ia)

for (int q : p) cout << q << " ";

cout << endl;

for (size_t i = 0; i != 3; ++i)

for (size_t j = 0; j != 4; ++j) cout << ia[i][j] << " ";

cout << endl;

for (int_array* p = ia; p != ia + 3; ++p)

for (int* q = *p; q != *p + 4; ++q) cout << *q << " ";

cout << endl;

system("pause");

return 0;

}

(3)改寫上一程式,這次使用auto 關鍵字。

#include #include using namespace std;

int main()

;// a range for to manage the iteration

for (auto& p : ia)

for (int q : p) cout << q << " ";

cout << endl;

// ordinary for loop using subscripts

for (size_t i = 0; i != 3; ++i)

for (size_t j = 0; j != 4; ++j) cout << ia[i][j] << " ";

cout << endl;

// using pointers.

for (auto p = ia; p != ia + 3; ++p)

for (int* q = *p; q != *p + 4; ++q) cout << *q << " ";

cout << endl;

system("pause");

return 0;

}

五、總結

第三章主要是介紹三類基本的容器:vector、陣列、string。幾點比較重要的指示:迭代器的使用、指標與陣列和vector的關係、命名空間的了解較為基礎。

第三章 棧 佇列 陣列

1.假設棧初始為空,將中綴表示式 這題和上題區別就是rear指向隊尾元素,而不是隊尾元素的下乙個元素 4.設有下圖所示的火車車軌,入口到出口之間有n條軌道,列車的行進方向均為從左至右,列車可駛入任意一條軌道。現有編號為1 9的9列列車,駛入的次序依次是8,4,2,5,3,9,1,6,7。若期望駛出的...

第三章 堆疊

1.基礎知識 堆疊可以實現很多的應用,遞迴的問題轉化成非遞迴形式,在本質上也是堆疊的問題.它是一種 filo 操作的資料結構,一般也有兩種儲存方式 陣列跟鍊錶實現形式,這裡我給出了鍊錶形式的堆疊模板,裡面包括了基本的堆疊所有的操作,還有兩個比較著名的應用例子,時間倉促,精力比較有限,關於迷宮老鼠還沒...

第三章 曙光

第三章 曙光 第二場校園招聘開始了。其實,洋對這個公司的不是很了解。因為前幾天突然在bbs上面看到了這個公司的招聘資訊,洋覺得這個公司不錯,就上網投了簡歷。接下來的乙個多小時,讓洋很震撼!想不到這個公司這個厲害,而且無論從哪方面來說,絕對不比之前的那個公司差。想不到自己的乙個不經意的決定到了這個大的...