是否有可能将矩阵与initializer_list相乘

Would it be possible to multiply a Matrix with an initializer_list?

本文关键字:initializer list 相乘 有可能 是否      更新时间:2023-10-16

我正在尝试创建一个数学库,想知道是否可以将矩阵直接乘以uninitialised_list,而不是先将其包装在向量中。

我想获得这样的东西。

 Matrix<double> M = {{1, 1}, {2, 2}};
 vector<double> v = M * {2.0, 2.0};

矩阵初始化工作得很好。所以矩阵 M 是一个 2x2 矩阵。我想将此 M 乘以向量 {2.0、2.0},但是我收到以下错误。

error: expected primary-expression before '{' token
     vector<double> v = M * {2.0, 2.0};

我的问题是这在 c++ 中真的可行吗?

我的重载运算符 * 将接受initializer_list如下所示。

template<typename T>
vector<T> Matrix<T>::operator*(const initializer_list<T> &list)
{
  vector<T> result(list.size(), 0.0);
  for (size_t i = 0; i < d_rows; ++i) 
  {
    for (size_t j = 0; j < d_cols; ++j) 
    {
      result[i] = d_matrix[i][j] * *(list + j);
    }
  }
  return result;
}

初始化应使用初始值设定项。我不是不可能,但有一些解决方法:

vector<T> Matrix<T>::operator*(std::initializer_list<double> a)
{
    ....
}
auto v = M * std::initializer_list<double>{2.0, 2.0};
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            //  Make an initialized object

但是,它不够合适和可读性。我更喜欢下面的代码:

auto v = M * Matrix<double>{2.0, 2.0};
             ^^^^^^^^^^^^^^^^^^^^^^^^^
               // Initialized Matrix