double MVector::innerProduct( MVector Vec_B ) { set<int> ID_AB = this->getKeys(); // get A-keys set<int> ID_B = Vec_B.getKeys(); // get B-keys ID_AB.insert(ID_B.begin(), ID_B.end()); // merge AB-keys double result = 0.0; for (set<int>::iterator iter = ID_AB.begin(); iter != ID_AB.end(); iter++) { result += this->getElem(*iter) * Vec_B.getElem(*iter); } return result; }
MVector MVector::subtract( MVector Vec_B ) { set<int> ID_AB = this->getKeys(); // get A-keys set<int> ID_B = Vec_B.getKeys(); // get B-keys ID_AB.insert(ID_B.begin(), ID_B.end()); // merge AB-keys MVector result(this->DIM); for (set<int>::iterator iter = ID_AB.begin(); iter != ID_AB.end(); iter++) { double value = this->getElem(*iter) - Vec_B.getElem(*iter); result.setElem(*iter, value); } return result; }