gpt4 book ai didi

c++寻找一种干净有效的方法来获取子矩阵

转载 作者:行者123 更新时间:2023-11-30 05:14:05 25 4
gpt4 key购买 nike

我正在使用 vector 的 vector 来创建类似于以下内容的二维数组:

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::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);
}

关于c++寻找一种干净有效的方法来获取子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43579022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com