static void add_to_vector(double multiplier, const StaticSparseVector &u, DynamicSparseVector &v) { StaticSparseVector::const_iterator p=u.begin(); if(p==u.end()) return; DynamicSparseVector::iterator q=v.begin(); for(;;){ if(q==v.end()) break; if(p->index < q->index){ q=v.insert(q, SparseEntry(p->index, multiplier*p->value)); ++p; if(p==u.end()) return; }else if(p->index > q->index){ ++q; if(q==v.end()) break; }else{ // p->index == q->index){ q->value+=multiplier*p->value; ++p; if(p==u.end()) return; ++q; if(q==v.end()) break; } } for(;;){ v.push_back(SparseEntry(p->index, multiplier*p->value)); ++p; if(p==u.end()) return; } }
static void copy_column(int colstart, int nextcolstart, const int *rowindex, const double *value, DynamicSparseVector &v) { for(int i=colstart; i<nextcolstart; ++i) v.push_back(SparseEntry(rowindex[i], value[i])); }