我正在使用矢量矢量来创建类似于:
的二维数组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++
的基础知识。
答案 0 :(得分:1)
您可以通过调用std::vector
的构造函数替换内部循环来获取迭代器,并使用std::next
从头开始获取迭代器的四个元素:
if (matrix[n][m-1] >= matrix[n][m]) {
std::vector<std::vector<int>> submatrix;
for (int i=0; i < 3; i++) {
submatrix.push_back(matrix[i].begin(), std::next(matrix[i].begin(), m));
}
return find_a_peak(submatrix);
}
答案 1 :(得分:0)
使用带有两个迭代器作为参数的std::vector
构造函数。
if (matrix[n][m-1] >= matrix[n][m])
{
std::vector<std::vector<int> > submatrix;
for (int i=0; i < matrix.size(); i++) {
submatrix.push_back(std::vector<int>(matrix[i].begin(), matrix[i].begin() + m));
}
return find_a_peak(submatrix);
}