二維向量
接下來,你將使用向量來存儲矩陣。就像 Python 使用列表列表來存儲矩陣一樣,C++ 使用的是向量的向量。用於聲明二維向量的語法有點復雜。
假設你正在使用 Python,並且想存儲一個 3 乘 5 的矩陣。你可以這么寫:
matrixexample = [[2,1,5], [7,9,2], [16,5,9], [5,2,1], [1,2,4]]
在 C++ 中,你可以將矢量附加到矢量來創建一個類似的結構。下面是 Python 和 C++ 代碼的比較。我們來看看:
代碼解釋
首先,這一行
vector < vector <int> > twodvector;
聲明了一個叫做 twodvector 的空二維向量。有幾件事要注意:
- 就像 C++ 中的所有變量一樣,你必須聲明向量中將使用哪種類型的值。在本例中,twodvector 變量將使用整數。
- 注意括號之間的空格
< vector <int> >
。如果空格不正確,程序可能無法運行。
然后,聲明一個叫做 singlerow 的一維向量。singlerow 向量的形式為 [2, 2, 2]。
vector<int> singlerow (3,2);
然后 singlerow 向量被追加到 twodvector 五次:
for (int i = 0; i < 5; i++) { twodvector.push_back(singlerow); }
最終將得到與 Python 代碼中一樣的二維結構。運行這段 C++代碼后,終端會輸出如下結果:
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
另一種設置向量的方法
以下是前面的例子中設置向量的另一種方法:
vector < vector <int> > twodvector (5, vector <int> (3, 2));
語法要稍微復雜一點。但是,如果從括號內往外看,你會發現它實際上已經具備所有功能。
這一行:
vector <int> (3, 2)
可以設置一個整數向量,如 [2, 2, 2]。所以,即使你看不到內部的向量,代碼的功能依然是這樣的:
vector < vector <int> > twodvector (5, [2, 2, 2]);
然后,代碼將[2, 2, 2] 五次應用到 twodvector 變量中:
[[2,2,2], [2,2,2], [2,2,2], [2,2,2], [2,2,2]]
請記住,只有 Python 才會用方括號[]表示向量或矩陣。較新版本的 C++可以使用大括號來表示矢量{},但 C++ 的較早版本沒有對應的表示形式。
像下面這樣的代碼無法在 C++ 中運行:
vector < vector <int> > twodvector (5, [2, 2, 2]);