C/C++で行列演算クラスを書きました

行列演算が必要&外部ライブラリを使いたくないという状況ができましたので作成しました.

※以下ヘッダ部抜粋

#include <iostream>
#include <vector>

/*
 * 行列演算クラス
 */
class Ematrix
{
  private:
    int row;
    int col;
    std::vector< std::vector<long long> > value;
  public:
    // 1行1列の行列
    Ematrix();
    // 単位行列
    Ematrix(int);
    // 行数と列数を指定した行列
    Ematrix(int, int);
    // コピーコンストラクタ
    Ematrix(const Ematrix&);
    // 添字演算子
    inline std::vector<long long> operator [](int) const;
    inline std::vector<long long>& operator [](int);
    // 算術演算子
    const Ematrix operator +(const Ematrix&) const;
    const Ematrix operator -(const Ematrix&) const;
    const Ematrix operator *(const Ematrix&) const;
    const Ematrix operator *(const int&) const;
    // 行数ゲッタ
    int get_row() const;
    // 列数ゲッタ
    int get_col() const;
    // 要素ベクトルゲッタ
    std::vector< std::vector<long long> > get_value() const;
};

※実装部一部抜粋

Ematrix::Ematrix()
  :row(1), col(1),
   value(std::vector< std::vector<long long> >(1,
         std::vector<long long>(1,0)))
{
}

Ematrix::Ematrix(int row, int col)
  :row(row),
   col(col),
   value(std::vector< std::vector<long long> >(row,
         std::vector<long long>(col,0)))
{
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

inline std::vector<long long> Ematrix::operator [](int index) const
{
  return this->value[index];
}

inline std::vector<long long>& Ematrix::operator [](int index)
{
  return this->value[index];
}

行列の要素はstd::vectorで持っておき、添字演算を可能にしています. 引数なしで初期化した場合は1行1列の行列が生成されます.

  • 行列の実数倍
  • 行列の和
  • 行列の差
  • 行列の積
  • 単位行列 に対応しています.

もし使いたい方がいれば以下からどうぞ.

github.com