复制矩阵选择不复制的行
Copy Matrix selecting which rows not to copy
我试图找出这一点时有问题: 我的矩阵为12x12,例如,我想创建一个10x10的新矩阵,它是第一个的确切副本,但选择了哪个两个列不复制。有可能做到这一点吗?我真的无法弄清楚
不幸的是,我需要说,有4200万个可能的解决方案: - (
通常我会使用std ::算法解决问题。
,但是,首先,我将使用许多循环来复制数据。
由于您没有告知矩阵元素的类型,因此我将矩阵创建为模板。无论您想要什么尺寸。此外,我添加了一个设施,以便能够指定不应复制的行/柱的变量列表。
代码是评论,相当简单的。然而。如果您有疑问,那么我很乐意回答。
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
// Matrix as vector of vectors
template <class T>
struct Matrix
{
Matrix(size_t size) { matrix.resize(size); std::for_each(matrix.begin(), matrix.end(), [size](Columns & c) {c.resize(size); }); }
Matrix() {}
Matrix copyAndShrink(std::vector<size_t>& vectorsToOmit);
// A vetcor has Columns
using Columns = std::vector<T>;
// ANd rows. And that will be the matrix
std::vector<Columns> matrix{};
};
template <class T>
Matrix<T> Matrix<T>::copyAndShrink(std::vector<size_t>& vectorsToOmit)
{
// Define resulting new destination Matrix
Matrix<T> reducedMatrix{};
// Iterate over all rows
for (size_t row=0; row< matrix.size(); ++row) {
// If we shall not copy, then ignore this row
if (vectorsToOmit.end() != std::find(vectorsToOmit.begin(),vectorsToOmit.end(), row )) continue;
// Create a new empty row in the destination matrix
reducedMatrix.matrix.push_back(Columns());
// Now we wan to copy the columns
for (size_t column=0; column< matrix.size(); ++column) {
// But only, if this columns shall be copied
if (vectorsToOmit.end() != std::find(vectorsToOmit.begin(),vectorsToOmit.end(), column )) continue;
// Copy
reducedMatrix.matrix.rbegin()->push_back(matrix[row][column]);
}
}
return reducedMatrix;
}
constexpr size_t OriginalMatrixSize{12};
int main()
{
// Define the source
Matrix<int> m(OriginalMatrixSize);
// fill the Matrix with some test data
int fillCounter{0};
for (size_t rows=0;rows<OriginalMatrixSize;++rows)
for (size_t columns=0;columns<OriginalMatrixSize;++columns)
m.matrix[rows][columns] = fillCounter++;
// Define the rows and columns that we do not want to copy
std::vector<size_t> vectorsToOmit{2UL,4UL};
// Copy the source matrix to a reduced destination
Matrix<int> reducedMatrix{m.copyAndShrink(vectorsToOmit)};
// Show result. Print complete matrix
for (size_t rows=0;rows<OriginalMatrixSize-vectorsToOmit.size();++rows) {
for (size_t columns=0;columns<OriginalMatrixSize-vectorsToOmit.size();++columns) {
std::cout << reducedMatrix.matrix[rows][columns] << ' ';
}
std::cout << 'n';
}
return 0;
}
相关文章:
- 如何使用默认参数等选择模板专业化
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 使用strcpy将char数组的元素复制到另一个数组
- 是否可以初始化不可复制类型的成员变量(或基类)
- 复制矩阵选择不复制的行
- 为什么编译器在调用 move 后选择复制 ctor
- 我将如何选择进行多个数学问题,而无需每次复制和粘贴代码
- 正确复制 QTableView 中的选择(模型索引问题)
- QStyledItemDelegate 和 QStandardItem 阻止更改文本,仅启用选择和复制
- C 编译器可以在用户定义和编译器生成的复制构建器之间进行自由选择
- 有没有一种非重复的方法允许程序员在成员初始化的复制和移动语义之间进行选择
- 为什么选择复制构造函数而不是移动构造函数
- 如何使用运行时选择基 CTOR 初始化不可复制的基类
- clang-libc++错误:重载解析选择了隐式删除的复制赋值运算符
- 编译器在移动和复制构造函数之间的选择
- 选择一个垫子的子集并复制它们以在C++/Opencv中创建一个新垫子
- 根据模板参数选择合适的复制构造函数
- 强制编译器选择以 const T& 作为参数的复制构造函数
- 为不可复制对象选择构造函数