T = Tab; delete[] Tab;
void TableauDynamique::ajoutElt(double newelt, int pos) { if (pos >= dim) pos = dim; ++dim; double *tmp = new double[dim]; int shift = 0; // décalage for (int i = 0; i < dim; ++i) { if (i == pos) { *(tmp + i) = newelt; ++shift; } else *(tmp + i) = *(Tab + i - shift); } delete[] Tab; Tab = tmp; }
Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
j'avais essayé la solution que tu me disais, *T = *Tab mais dans ce cas, la totalité des valeurs se retrouvais aléatoire après le delete,
Disons que ce qui m'étonnais le plus, dans tous les essais que j'ai pu faire, seule le 1er élément du tableau a une valeur modifié après de delete.
c'est donc bien ce que je pensais, c'est un problème lié au faite que le nouveau tableau créé pointe sur les valeurs de l'ancien, et quand l'ancien est supprimer, le nouveau tableau s'en retrouve modifié, mais je n'arrive pas a comprendre pourquoi pas toutes les valeurs, et uniquement la première.
l'usage de Dev-c++ est uniquement du a la portabilité et a la petite taille pour le téléchargement.
Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
void TableauDynamique::ajoutElt(double newelt, int pos)
{
double *T = new double[dim+1];
for (int i=0; i<pos; i++)
{ *(T+i)=*(Tab+i); }
*(T+pos) = newelt;
for (int i=pos; i<dim; i++)
{ *(T+i+1)=*(Tab+i); }
dim++;
delete[] Tab;
Tab = new double [dim];
for (int i=0; i<dim; i++)
{ *(Tab+i)=*(T+i); }
delete[] T;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question#include <iostream> struct Dummy { Dummy() : dim(0), Tab(0) { } ~Dummy() { delete Tab; } void ajoutElt(double newelt, int pos) { // Copie des n premiers éléments semblables. double *T = new double[dim + 1]; for (int i = 0; i < pos && i < dim; ++i) *(T + i) = *(Tab + i); // Cas ou pos est plus grand que ton tableau. if (pos >= dim + 1) pos = dim; // Copie de l'élément. *(T + pos) = newelt; // Copie des éléments restants avec un décalage. for (int i = pos; i < dim; ++i) *(T + i + 1) = *(Tab + i); // Remplacement du tableau. ++dim; delete[] Tab; Tab = T; } void print(std::ostream& out) const { for (int i = 0; i < dim; ++i) out << Tab[i] << " "; out << std::endl; } int dim; double* Tab; }; int main() { Dummy dummy; dummy.ajoutElt(1.0, 0); dummy.ajoutElt(2.0, 0); dummy.ajoutElt(3.0, 0); dummy.ajoutElt(9.0, 0); dummy.ajoutElt(1.5, 0); dummy.ajoutElt(90, 1000); dummy.ajoutElt(78, 3); dummy.print(std::cout); return 0; }
Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature