Vecteur_Creux Vecteur_Creux::operator+(const Vecteur_Creux& v2) const { // pour stocker les indices utiles et les valeurs utiles du vecteur résultat int* ixres = new int[nbu + v2.nbu]; int* utres = new int[nbu + v2.nbu]; // pour calculer le nb de valeurs utiles du vecteur résultat int nbures = 0; // on parcourt en parallèle les indices utiles du vecteur 1 (l'objet courant) // et du vecteur 2 (v2) int i1 = 0, i2 = 0; // indices de parcours des vecteurs des indices utiles bool finVect1 = false, finVect2 = false; while (!finVect1 || !finVect2) { int ind_utile1, ind_utile2; if (!finVect1) ind_utile1 = vix.get_val(i1); if (!finVect2) ind_utile2 = v2.vix.get_val(i2); if ((ind_utile1 < ind_utile2 && !finVect1) || finVect2) { ixres[nbures] = ind_utile1; utres[nbures] = vut.get_val(i1); i1++; } else if (ind_utile1 == ind_utile2 && !finVect1 && !finVect2) { ixres[nbures] = ind_utile1; utres[nbures] = vut.get_val(i1) + v2.vut.get_val(i2); i1++; i2++; } else if ((ind_utile2 < ind_utile1 && !finVect2) || finVect1) { ixres[nbures] = ind_utile2; utres[nbures] = v2.vut.get_val(i2); i2++; } nbures++; if (i1 == nbu) finVect1 = true; if (i2 == v2.nbu) finVect2 = true; } // nb de valeurs réelles du vecteur résultat : max des 2 nb de valeurs réelles int nbrres = (nbr > v2.nbr)? nbr : v2.nbr; Vecteur vutres(utres, nbures); Vecteur vixres(ixres, nbures); Vecteur_Creux vres(vutres, vixres, nbrres); delete [] ixres; delete [] utres; return vres; }
Vecteur_Creux Vecteur_Creux::Sous_Vecteur(int d) const { // pour stocker les indices utiles et les valeurs utiles du sous-vecteur int* ixSousVect = new int[nbu]; int* utSousVect = new int[nbu]; // parcours des indices utiles du vecteur pour ne garder que ceux < d int i = 0; while (vix.get_val(i) < d) { ixSousVect[i] = vix.get_val(i); utSousVect[i] = vut.get_val(i); i++; } int nbuSousVect = i; Vecteur vutSousVect(utSousVect, nbuSousVect); Vecteur vixSousVect(ixSousVect, nbuSousVect); Vecteur_Creux sousVect(vutSousVect, vixSousVect, d); delete [] ixSousVect; delete [] utSousVect; return sousVect; }