如何解决如何使用指针访问矩阵的列的元素
我有一个矩阵A
,我需要传递一个指向function
的指针以访问给定列的元素,这是代码的一部分,其中PtrColumn
应该是指向表示j
的列A
的向量的指针。有没有一种方法可以获取此指针而无需计算矩阵A
的转置。
vector<vector<double>> A;
int l=4,c=5;
A.reserve(l)
for(size_t i=0;i<l;++i)
{
vector<double> row;
row.reserve(c)
for(size_t j=0;j<c;++j)
row.puch_back(j);
A.puch_back(row);
}
////// some part of the code/////
for(size_t j=0;j<c;++j)
function(PtrColumn) //PtrColumn is a pointer to a vector,and my vector is the column j of A
解决方法
我将为列使用矩阵类和包装类:
#include <iostream>
#include <vector>
class Matrix;
class Column {
Matrix *A;
std::size_t column;
public:
Column(Matrix &A,std::size_t column);
double &operator[](std::size_t row);
std::size_t size() const;
};
class Matrix {
std::size_t columns;
std::size_t rows;
std::vector<double> A;
public:
Matrix(std::size_t l,std::size_t r) : columns(r),rows(l),A(l * r) {}
double &operator()(std::size_t i,std::size_t j) { return A[i * columns + j]; }
std::size_t getColumns() const { return columns; }
std::size_t getRows() const { return rows; }
Column getColumn(std::size_t column) { return Column(*this,column); }
};
Column::Column(Matrix &A,std::size_t column) : A(&A),column(column) {}
double &Column::operator[](std::size_t row) { return (*A)(row,column); }
std::size_t Column::size() const { return A->getRows(); }
void function(Column col) {
std::cout << col[2] << '\n';
std::cout << col.size() << '\n';
}
int main() {
int l = 4,c = 5;
Matrix A(l,c);
for(size_t i=0;i<l;++i)
for(size_t j=0;j<c;++j)
A(i,j) = j;
////// some part of the code/////
for(size_t j = 0; j < c; ++j)
function(A.getColumn(j)); //PtrColumn is a pointer to a vector,and my vector is the column j of A
}
这是没有矩阵类的代码
#include <iostream>
#include <vector>
class Column {
std::vector<std::vector<double>> *A;
std::size_t column;
public:
Column(std::vector<std::vector<double>> &A,column(column) {}
double &operator[](std::size_t row) { return (*A)[row][column]; }
std::size_t size() const { return A->size(); }
};
void function(Column col) {
std::cout << col[2] << '\n';
std::cout << col.size() << '\n';
}
int main() {
std::vector<std::vector<double>> A;
int l=4,c=5;
A.reserve(l);
for(size_t i=0;i<l;++i) {
std::vector<double> row;
row.reserve(c);
for(size_t j=0;j<c;++j)
row.push_back(j);
A.push_back(row);
}
////// some part of the code/////
for(size_t j=0;j<c;++j)
function(Column(A,j)); //PtrColumn is a pointer to a vector,and my vector is the column j of A
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。