我使用的矢量的矢量創建一個類似二維數組的子矩陣:C++尋找一個清潔,高效的方式來獲得
std::vector<std::vector<int> > matrix = {
{1, 2, 3, 4, 4, 6, 7, 8, 9},
{1, 2, 3, 5, 4, 6, 7, 8, 9},
{1, 2, 3, 4, 4, 6, 7, 8, 9}
};
現在我想提取子矩陣的規格:
1) all rows
2) the first 4 columns
我是新來c++
所以我想出了在現在最好的是:
if (matrix[n][m-1] >= matrix[n][m])
{
std::vector<std::vector<int> > submatrix(3);
for (int i=0; i < 3; i++) {
std::vector<int> slice(m);
for (int j=0; j < m; j++){
slice[i] = matrix[i][j];
}
submatrix[i] = slice;
}
return find_a_peak(submatrix);
}
其中m
= 4;
這只是爲了練習,所以請建議一個乾淨的方式來做到這一點。我是一名經過培訓的Python程序員,所以在numpy
這很容易。但我想在學習第三方庫之前瞭解c++
的基礎知識。
一個'std :: vector>'不應該用於矩陣。圍繞單個'std :: vector '具有'n * m'大小的包裝會更好。也是一個非常好的鍛鍊! –
看來,在內部for循環中,賦值應該是slice [j] = matrix [i] [j]'。在這種情況下,可以用'submatrix [i] = std :: vector(matrix [i] .begin(),matrix [i] .begin()+ m)替換'for' 。請記住,假定'm'小於'matrix'中的列數。 –
Peter
@GuillaumeRacicot可以請您詳細說明一下嗎?也許有鏈接? –