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