我一直在努力解决这个问题,广泛搜索没有运气的答案,所以我希望你能帮助我.
我正在使用向量的stl向量在c ++中编写模板矩阵类来存储矩阵值,如下所示:
std::vector< std::vector< T > > m;
Run Code Online (Sandbox Code Playgroud)
其中大写字母T是模板类.到目前为止,我已经使用简单的嵌套for循环和双括号[] []访问了数组,正如您在此重载运算符中看到的那样:
template< class T >
Matrix<T> Matrix<T>::operator + ( const Matrix<T>& rhs )
{
Matrix<T> result( rows_, cols_ );
if( ( rows_ == rhs.rows_ ) && ( cols_ == rhs.cols_ ) )
{
for ( unsigned int i = 0 ; i < rows_ ; i++ )
{
for ( unsigned int j = 0 ; j < cols_ ; j++ )
{
result.m[i][j] = m[i][j] + rhs.m[i][j];
}
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我认为使用内置的stl迭代器为向量更干净,更安全.它目前看起来像这样:
template< class T >
Matrix<T> Matrix<T>::operator - ()
{
Matrix<T> result( rows_, cols_, 0.0);
for
(
typename std::vector< std::vector< T > >::iterator
iRow = m.begin() ;
iRow < m.end() ;
iRow++
)
{
for
(
typename std::vector< T >::iterator
iCol = iRow->begin() ;
iCol < iRow->end() ;
iCol++
)
{
result.m[iRow][iCol] = -( m[iRow][iCol] );
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
现在我得到:错误:不匹配'[]运算符'和一个非常广泛的冗长候选列表.但是,在尝试了解问题并重写代码一段时间之后,它仍然无法编译.请指出我正确的方向.
问候,迈克尔
这不是迭代器的工作方式.迭代器不是索引,它更像是指针.因此,您需要在源矩阵和目标矩阵上使用迭代器.我会说,在你的情况下,指数实际上是更好的选择.
但是如果你想使用iteratos,你可以这样做:
for
(
typename std::vector< std::vector< T > >::iterator
iRowS = m.begin(), iRowD = result.m.begin();
iRowS != m.end();
++iRowS, ++iRowD
)
{
for
(
typename std::vector< T >::iterator
iColS = iRowS->begin(), iColD = iRowD->begin();
iColS != iRowS->end();
++iColS, ++iColD
)
{
*iColD = - *iColS;
}
}
Run Code Online (Sandbox Code Playgroud)