Ceci dit, le deuxième commandement, c'est
les variables globales, c'est mal
, et le troisième du C++ c'est
préfère les classes conteneurs à leur équivalent codé main "C style"
Pour répondre au fait que tu ne connais pas std::vector, on peut tout simplement dire que ca regroupe tous les avantages des tableaux classiques, sans en avoir les inconvéninants...
A savoir:
- Il est capable de maintenir en mémoire n'importe quel nombre d'éléments
- Il connait en permanence le nombre d'élément qu'il contient (tu te contente de le passer en argument, et la taille est d'office connue
) - Il s'occupe lui même de gérer la mémoire pour éviter les problèmes
- Il fournit un acces au élément en O=1
- Il permet d'ajouter et/ou de retirer des éléments n'importe où: au début, à la fin, voir meme entre deux éléments (le retrait d'éléments peut même s'effectuer sur une plage donnée: du 10eme au 20eme)
Son utilisation de base est relativement simple:
Il "suffit" d'nclure le fichier d'en-tete (standard) <vector>
La déclaration d'un objet de type vector se fait sous la forme de
std::vector<Type_d_elements_A_contenir> lenom;
ou, si tu a mis la directive using namespace std; sous la forme de
vector<Type_d_elements_A_contenir> lenom;
L'ajout d'un élément en fin de tableau se fait sous la forme de
lenom.push_back(la_variable_a_ajouter);
L'ajout d'un élément partout ailleurs se fait sous la forme de
lenom.insert(lenom.begin()+position);
Le retrait du dernier élément se fait sous la forme de (avec récupération du dernier élément)
lavar_qui_recupere=lenom.pop_back();
l'obtention du dernier élément (sans suppression de l'élément)peut se faire sous la forme de
lavar_qui_recupere=lenom.back();
tu peux obenir n'importe quel élément sous la forme, classique, de
lavar_qui_recupere=lenom[index_voulu];
La suppression (sans récupération de la valeur) d'un élément peut se faire sous la forme de
lenom.erase(lenom.begin()+index);
la suppression d'une plage d'éléments (par exemple du 10eme au 20eme) peut se faire sous la forme de
lenom.erase(lenom.begin()+index_depart,lenom.begin()+index_fin);
Si tu veux vider l'ensemble du tableau, tu peux le faire sous la forme de
sois attentif au fait que, si la mémoire des éléments contenus a été allouée dynamiquement, tu est responsable de la libération de la mémoire, ce qui prendrait la forme de
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
#include <vector>
void fonctionInsertion(std::vector<MaClass*>& tab)
{
tab.push_back(new MaClass());
/* ou
* MaClass* obj=new MaClass();
* tab.push_back(obj);
*/
}
void Liberation(std::vector<MaClass*>& tab)
{
for(size_t i=0;i<tab.size();i++)
{
delete tab[i]; /* libere la mémoire allouée à l'élément [i]*/
}
tab.clear(); /* vide le tableau
}
int main()
{
std::vector<MaClass*> tab;
/* juste un exemple, hein ;) */
for(size_t i=0;i< variable;i++)
{
fonctionInsertion(tab);
}
/*...*/
Liberation(tab);
return 0;
} |
Partager