以下是处理symmetrix矩阵的代码的一部分:
SymmetricMatrix<std::deque<int> > a(3);
SymmetricMatrix<std::list<int> > b(3);
SymmetricMatrix<std::vector<int> > c(4);
SymmetricMatrix<std::list<int> > d(3);
a(1,1) = b(1,1) = c(1,1) = d(1,1) = 7;
a(1,2) = b(2,1) = c(1,2) = d(2,2) = 3;
if(b == c) {}
您建议使用哪种容器或数据结构来实现SymmetricMatrix
类? (我试过std::vector
)另外,我怎么能实现==运算符?现在,它适用于b == d,但不适用于== b(no match for 'operator =='
)。
答案 0 :(得分:2)
在==
上未定义a == b
的原因是因为类SymmetricMatrix<std::deque<int> >
和SymmetricMatrix<std::list<int> >
属于不同类型。其中一个内部定义的运算符==
将无法应用。
但是,C ++允许您定义“独立”运算符模板,如下所示:
template <typename T, typename U>
bool operator==(const SymmetricMatrix<T>& lhs, const SymmetricMatrix<U>& rhs) {
// Do the comparison here
}
此运算符引用具有不同类型参数的SymmetricMatrix
个对象,因此编译器将能够为a == b
调用它。您可能需要在SymmetricMatrix
模板中向此运算符声明“友谊”,以便让操作员访问矩阵类的私有成员和受保护成员。