通過引用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步是發佈您的矩陣的代碼。 –