0
我已经定义了一个矩阵类,并且重载了+运算符以便能够将这个类的实例一起添加。使用超载添加两个矩阵的最佳方法是什么?
class Matrix{
public:
vector<vector<int>> a;
Matrix & operator+(const Matrix& b)
{
vector<vector<int>>::const_iterator it0=b.a.begin();
vector<vector<int>>::iterator it1=this->a.begin();
vector<int>::iterator it2=it1->begin();
vector<int>::iterator it3=it1->end();
vector<int>::const_iterator it01=it0->begin();
for(it1;it1!=this->a.end();it1++)
{
it2=it1->begin();
it3=it1->end();
it01=it0->begin();
it0++;
// a.begin(),a.end(),b.begin(),ret.begin()
std::transform(it2,it3,it01,it2,std::plus<int>());
}
return *this;
}
};
但后来,还存在这样做的另一种方式,
class Matrix{
public:
vector<vector<int> > a;
Matrix & operator + (const Matrix &y) {
for (int m=0; m<y.a.size(); ++m) {
for (int n=0; n<y.a[0].size(); ++n) {
this->a[m][n] = this->a[m][n] + y.a[m][n];
}
}
return *this;
}};
第二种形式是更短的,但直接使用阵列,而第一个使用迭代器。也许可以用更短的方式用迭代器来做到这一点,我不确定。我已经用简单的案例进行了测试,它们似乎同样高效。 这样做的正确方法是什么?
无论你认为更可读性是“最好的方式”。如果两种方式表现相同,只要选择看起来更清晰的任何东西。 –
个人而言,我更喜欢第二种方法,因为它更简洁明了代码的功能。如果您使用的是C++ 11,则可以考虑使用[基于范围的循环](http://en.cppreference.com/w/cpp/language/range-for)来使事情更清晰。 –
第二个人,你不是指'+ ='吗? – o11c