通过引用get_column我有一个矩阵,并且我get_row()
通过行参考并且get_column
通过柱参考如何?get_row和基质在C++
其中一个我不能通过参考获得(我通过行主ordering
和列主要ordering
尝试,但它没有解决这个问题,因为我需要通过参考)。我如何重新定义(覆盖)vector
来解决这个问题?
谢谢!
通过引用get_column我有一个矩阵,并且我get_row()
通过行参考并且get_column
通过柱参考如何?get_row和基质在C++
其中一个我不能通过参考获得(我通过行主ordering
和列主要ordering
尝试,但它没有解决这个问题,因为我需要通过参考)。我如何重新定义(覆盖)vector
来解决这个问题?
谢谢!
首先,不要忽略所有要求你来发表您的类的代码谁的人。
这就是说,你可以做的就是定义一些作品相当一个迭代器WRT一行或一列。不是你实际要求的内容,但是由于行和列的内存不能连续,所以无论如何你都需要一个自定义类型。
这是一个布局示例,当然省略了很多东西。我还没有深入思考,可能很容易就会有更好的模式。我创建矩阵类作为一个超过双重的类,很可能你会使用模板。
class Matrix{
class RowIterator;
friend class RowIterator;
private:
vector<vector<double> > data;
public:
RowIterator row_iterator(const unsigned int row);
}
class Matrix::RowIterator{
private:
Matrix* parent;
unsigned int row;
unsigned int col;
public:
double& operator *();
RowIterator& operator++()
bool equals(const unsigned int column) const;
}
与
double& Matrix::RowIterator::operator *(){
return parent->data[row][col];
}
Matrix::RowIterator& Matrix::RowIterator::operator++(){
col++;
return *this;
}
bool equals(const unsigned int column) const{
return column == col;
}
和ColumnIterator同样(或两者为一个类存储和它是什么附加部件),也可以定义
inline bool operator==(const Matrix::RowIterator& lhs, const unsigned int rhs){
return lhs.equals(rhs)
}
并且同样周围的其他方法和!= - 运营商
能够做这样的代码
for(Matrix::RowIterator it = matrix.row_iterator(desired_row); it != matrix.columns(); it++)
再次(或者用东西导致
for(Matrix::RowIterator it = matrix.row_iterator(desired_row); it.at_valid_position(); it++)
去),有可能是一个更好的方式的模式,不知道这一点。对编辑知道这个比我更好的人会感到高兴。
而且,当然,这可以简单地通过将与基体和该行的东西,而不是具有它只是在塔本身迭代完成 - 因此我不知道张贴这个答案。取决于你想要做什么以及有机逻辑是什么 - 会建议除了矩阵的代码之外,你还可以清楚地描述你想要用这些参考做什么。
另一种方法,更载体,如:
enum MatrixSubVectorType{ row_vector, column_vector };
class MatrixSubVector{
private:
MatrixSubVectorType type;
unsigned int fixed_coordinate;
Matrix* parent;
public:
double& operator[] (unsigned int i);
const double& operator [] (unsigned int i);
unsigned int size() const;
}
double& MatrixSubVector::operator[] (unsigned int i) {
if(type == row_vector){
return (*parent)(fixed_coordinate, i);
}
return (*parent)(i, fixed_coordinate);
}
unsigned int MatrixSubVector::size() const {
if(type == row_vector){
return parent->columns();
}
return parent->rows()
}
有了很多的东西省略,当然,像构造,只是为了显示模式。与其他模式一样,我将它作为Matrix的内部类,将Matrix作为朋友,构造函数是私有的,并且该类的对象只能由Matrix的方法创建。
正如我前面提到的,我想通过引用获得列和行,两者都是 – Lilia
类似这样的: column&get_column(size_type column_index) { return m_columns [column_index]; } row&get_row(size_type row_index) { return m_data [row_index]; } – Lilia
@Lilia重要的问题是你想用它做什么。再次,请回答这个问题:“你想要对提取的向量做什么?对它们进行迭代?写下它们?流出它们?” - 这里是重要的事情。其他一切都是XY-问题。不是“我想要这个”,而是“为了......”。再加上重要的内容 - 例如,如果内存不重要,您可以简单地使用一个矩阵类,该矩阵类还可以存储包含数据指针的附加向量。根据参考文献的性质,您需要使用类似于此的签名。 – Aziuth
一些代码,可以帮助解决这个:) –
忽略,这是一个不好的问题,你不能两者兼得。根据您是使用列还是行 - 主要,您可以按引用或按引用逐列。 –
第1步是发布您的矩阵的代码。 –