Я пишу класс, содержащий матрицу (двойных значений), представленную как vector<vector<double>>
;vector resize() automatic fill
Я хочу реализовать operator=
, чтобы заполнить мою матрицу деталями данной разреженной матрицы. Я пишу следующий код:
RegMatrix& RegMatrix::operator=(const SparseMatrix rhs){
if(*this != rhs){
_matrix.clear();
_matrix.resize(rhs.getRow());
int i;
for(i=0;i<rhs.getRow();++i){
_matrix.at(i).resize(rhs.getCol());
}
for(i=0;i<rhs.getSize();++i){
Element e = rhs.getElement(i);
_matrix[e._row][e._col] = e._val;
}
}
return *this;
}
заполнения ли метод resize()
автоматически вектор с нулями? Является ли моя реализация одобренной?
так, если я хочу двумерный вектор zise RowXCol и элемент каждого внутреннего вектора будет иметь значение 0, я должен изменить линию так, что это будет выглядеть например: _matrix.at (i) .resize (rhs.getCol(), 0); ? – limlim
@limlim: Вам не нужно его менять. Вы уже пропустили этот нуль * неявно *. Вы также можете передать этот ноль явно, но ничего не измените.Если вы считаете, что передача этого 0 явно делает ваш код более четким, тогда вы можете пойти туда и поместить его туда. Но это не будет иметь разницы в функциональности. – AnT
Если я не ошибаюсь, изменение размера не приведет к нулю существующих элементов. Если это то, что вы хотите сделать, используйте назначение (проверьте мой ответ для большего). – JoshD