是否有可能将矩阵与initializer_list相乘
Would it be possible to multiply a Matrix with an initializer_list?
我正在尝试创建一个数学库,想知道是否可以将矩阵直接乘以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
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- C++中带有List类的迭代器Segfault
- 使用"std::unordereded_map"映射到"std::list"对象
- GCC对可能有效的代码抛出init list生存期警告
- 使用std::list创建循环链表
- C2664 无法从'initializer list'转换参数
- 使用 std::min "no matching function for call to ‘min(<brace-enclosed initializer list>)’"时出错
- 在C++中标记化"Braced Initializer List"样式字符串(使用 Boost?
- "默认参数":无法从'initializer list'转换为'std::initializer_list'
- 无法从'initializer-list'转换为用户控制器
- 如何修复<function-style-cast>错误:无法从'initializer list'转换为asdending比较<W>(模板函子)
- 递归调用中出现错误"[Error] expression list treated as compound expression in initializer [-fpermissive]"
- VS2015无法从'initializer list'转换为'std::string'错误
- 编译器错误:"Non-aggregates cannot be initialized with initializer list."
- 无法转换...从 '<brace-enclosed initializer list>' 到 地图
- 无法将'<brace-enclosed initializer list>'转换为'double'作为回报
- <function-style-cast> 错误:无法从'initializer list'转换为'std::thread'
- initializer语言 - list不能转换为const margin *