37template<
typename _Scalar>
47 void resize(
size_t rowcol);
48 size_t row()
const {
return rowcol_; }
49 size_t col()
const {
return rowcol_; }
50 _Scalar operator()(
size_t row,
size_t col)
const noexcept {
return data_[index(row, col)]; }
51 _Scalar& operator()(
size_t row,
size_t col)
noexcept {
return data_[index(row, col)]; }
52 void setZero()
noexcept;
54 static constexpr size_t index(
size_t row,
size_t col)
noexcept {
return row*(row+1)/2 + col; }
55 static constexpr size_t capacity(
size_t nrowcol)
noexcept {
return nrowcol * (nrowcol + 1) / 2; }
61template <
typename _Scalar>
68template <
typename _Scalar>
69inline void LowerMatrix<_Scalar>::resize(
size_t rowcol)
75 data_ = (_Scalar*)malloc(
sizeof(_Scalar) * capacity(rowcol));
80template <
typename _Scalar>
81inline LowerMatrix<_Scalar>::LowerMatrix(
const LowerMatrix &other)
84 resize(other.rowcol_);
85 memcpy(
data_, other.data_,
sizeof(_Scalar) * capacity(
rowcol_));
88template <
typename _Scalar>
89inline LowerMatrix<_Scalar> &LowerMatrix<_Scalar>::operator=(
const LowerMatrix &other)
93 resize(other.rowcol_);
94 memcpy(data_, other.data_,
sizeof(_Scalar) * capacity(rowcol_));
99template <
typename _Scalar>
100inline LowerMatrix<_Scalar>::LowerMatrix(LowerMatrix &&other)
noexcept
102 rowcol_ = other.rowcol_;
105 other.data_ =
nullptr;
108template <
typename _Scalar>
109inline LowerMatrix<_Scalar> &LowerMatrix<_Scalar>::operator=(LowerMatrix &&other)
noexcept
113 std::swap(rowcol_, other.rowcol_);
114 std::swap(data_, other.data_);
118template <
typename _Scalar>
119inline void LowerMatrix<_Scalar>::setZero() noexcept
121 memset(data_, 0,
sizeof(_Scalar) * capacity(rowcol_));
125typedef LowerMatrix<double> LowerMatrixd;
下三角矩阵
定义 LowerMatrix.hpp:39
_Scalar * data_
矩阵数据
定义 LowerMatrix.hpp:58
size_t rowcol_
矩阵行数/列数
定义 LowerMatrix.hpp:57