1

这是我处理对称矩阵的代码的一部分:

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,但不适用于 a == b ( no match for 'operator ==')。

4

1 回答 1

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模板中向该运算符声明“友谊”,以便让运算符访问矩阵类的私有成员和受保护成员。

于 2013-08-15T10:18:09.540 回答