c++

C++ matrix如何实现自定义类型

小樊
89
2024-08-02 22:06:16
栏目: 编程语言

要实现C++中的矩阵(matrix)数据结构,可以先定义一个模板类来表示矩阵,然后为该类添加适当的方法和操作符重载来实现矩阵的各种操作。下面是一个简单的示例代码,演示了如何实现一个包含自定义类型的矩阵类:

#include <iostream>
#include <vector>

template <typename T>
class Matrix {
private:
    std::vector<std::vector<T>> data;
    int rows, cols;

public:
    Matrix(int rows, int cols) : rows(rows), cols(cols) {
        data.resize(rows, std::vector<T>(cols));
    }

    std::vector<T>& operator[](int i) {
        return data[i];
    }

    friend std::ostream& operator<<(std::ostream& os, const Matrix<T>& m) {
        for (int i = 0; i < m.rows; i++) {
            for (int j = 0; j < m.cols; j++) {
                os << m.data[i][j] << " ";
            }
            os << std::endl;
        }
        return os;
    }
};

// 自定义类型
struct Point {
    int x, y;
    Point(int x, int y) : x(x), y(y) {}
};

int main() {
    Matrix<Point> mat(2, 2);
    mat[0][0] = Point(1, 2);
    mat[0][1] = Point(3, 4);
    mat[1][0] = Point(5, 6);
    mat[1][1] = Point(7, 8);

    std::cout << mat;

    return 0;
}

在上面的示例中,我们定义了一个模板类Matrix,使用std::vector<std::vector>来存储矩阵的数据。我们还重载了[]操作符和<<操作符,以便使用数组访问和输出矩阵数据。最后,我们定义了一个自定义类型Point,并将其用作矩阵元素的类型。

通过这种方式,我们可以实现一个支持自定义类型的矩阵类,并进行相应的操作。您可以根据实际需求对这个示例代码进行扩展和修改。

0
看了该问题的人还看了