【发布时间】:2016-08-23 12:54:27
【问题描述】:
我正在为Hermitian matrices 编写课程。这是一个只有n*(n+1)/2 独立复数的复矩阵(忽略对角线完全为实数的细节)。
我的计划是只写上三角元素,其中行号与列号相比满足条件满足规则:row >= column。但是,这需要像代理这样的东西吗?我不确定如何实现这一点。问题来了:
假设我实现了成员函数at(int row, int column) 来访问一个元素。
template<typename T>
std::complex<T>& HermitianMatrix<T>::at(long row, long column)
{
if(row >= column)
return this->_matrix[ElementIndex(row,column)];
else
return std::conj(this->_matrix[ElementIndex(column,row)]);
}
其中ElementIndex 将row 和column 输入转换为数组std::complex<T>* _matrix = new std::complex<T>(...) 中的位置。当然,这个方法返回一个引用。您在上面看到的代码不适用于矩阵的下三角部分,因为返回后引用消失了。
实现这一点的正确和最有效的方法是什么,这样我有一些用于下三角矩阵部分的“管道”总是通过std::conj 进行设置和获取?
如果需要,请询问更多信息。谢谢。
【问题讨论】:
-
if 中的块应该是
ElementIndex(column, row),不是吗? -
@Holt 是的。我修好了它。谢谢。
标签: c++ c++11 reference c++14 proxy-classes