我使用的矢量的矢量创建一个类似二维数组的子矩阵: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可以请您详细说明一下吗?也许有链接? –