c ++寻找一种干净有效的方法来获取子矩阵
c++ Looking for a clean and efficient way to get a sub-matrix
我正在使用向量向量来创建类似于以下内容的 2d 数组:
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);
}
使用将两个迭代器作为参数的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);
}
相关文章:
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 在C++中初始化向量映射的最有效方法
- 将此布尔值传递给此函数的最有效方法是什么?
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- 比较C++中两个整数的最有效和最干净的方法是什么?
- 比较C++变量的最有效方法
- C++函子,有什么有效的方法吗?
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 存储变量的更有效方法是什么?
- 确保套装新鲜度的有效方法
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 映射唯一值和重复值的有效方法.可以访问键或值的位置
- 在C++事务之间存储大量字符数据的有效方法
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 证明两指针方法有效(对和)
- leetcode中的最大数字:有人能解释为什么这个方法有效吗
- C++ 用指针反向打印数组内容 - 为什么此方法有效
- Makefile:为什么这种自动生成先决条件的方法有效
- g++链接错误-解决方法有效的原因