J'écris une classe qui contient une matrice (de valeurs doubles), représentée par vector<vector<double>>
;vector redimensionner() remplissage automatique
Je veux implémenter le operator=
, pour remplir ma matrice avec les détails d'une matrice clairsemée donnée. J'écris le code suivant:
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;
}
Est-ce que la méthode resize()
remplir automatiquement le vecteur avec des zéros? Ma mise en œuvre est-elle acceptable?
donc, si je veux un vecteur de RowXCol de Zise, et l'élément de chaque vecteur intérieur à deux dimensions aura la valeur de 0, je devrais changer la ligne de sorte qu'il regarderait comme ça: _matrix.at (i) .resize (rhs.getCol(), 0); ? – limlim
@limlim: Vous n'avez pas besoin de le changer. Vous passez déjà ce zéro * implicitement *. Vous pouvez également passer ce zéro explicitement, mais cela ne changera rien.Si vous croyez que passer ce 0 explicitement votre code plus clair, alors vous pouvez aller de l'avant et le mettre là. Mais cela ne fera aucune différence sur le plan de la fonctionnalité. – AnT
Si je ne me trompe pas, redimensionner ne mettra pas à zéro les éléments existants. Si c'est ce que vous voulez faire, utilisez assign (consultez ma réponse pour plus d'informations). – JoshD