Utilisation de la STL

Résolu
PasqualiniG Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   -
Est-il possible d'accéder à un "vector", par exemple, à l'aide de son adresse ?
Je m'explique. Je peux avoir 2 vecteurs d'un même type de variable vSommetsCube et vSommetsDoca. Dans un sous-programme, puis-je utiliser l'un ou l'autre sous un autre nom par exemple vSommets, l'adresse de vSommets étant celle de l'un des 2 ?

Merci.

5 réponses

sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
Bonjour,
plus simple, utilise un tableaux de fonction et part la suite dans tes sous méthodes tu pourras faire ton choix de vecteur par exemple
à bientôt
0
PasqualiniG Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Ce n'est pas tout à fait la réponse que j'attendais.
Je crois avoir trouver une solution.

Il suffit dans le sous-programme de décider suivant un critère, par exemple, si bCube est une variable booléenne, d'écrire :
if(bCube == true) vSommets = vSommetsCube.
if(bCube == false) vSommets = vSommetsOcta;

0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
Le désavantage c'est que ça grille la performance si ton vector contient beaucoup d'élément, car l'opérateur
=
copie le contenu en effaçant le précédent.
Si tu ne modifies pas vSommets ou comptes modifier le vector qu'il désigne, utilise un pointeur:
std::vector<TYPE> *vSommets = bCube ? &vSommetsCube : vSommetsOcta;

Les
?
et
:
c'est un if compacté, appelé l'opérateur ternaire.
0
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
Bonjour @PasqualiniG pourquoi ?
if(bCube == true) vSommets = vSommetsCube.
if(bCube == false) vSommets = vSommetsOcta;

si tu peut faire comme dit @gravgun à peut prés en utilisant les opérateurs ternaire. et pas besoin de faire le teste
 true ou false 
return ( (bCube) ? a:b); 


Ceci dit tu @gravgun a raison car tu es en (O(1)) (partant de ton algo) et tu fait de l'instantané donc le mieux est bien un pointeur

à bientôt
0
PasqualiniG Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Merci, c'est exactement ce que je cherchais.

0
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
:)
0
PasqualiniG Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
En fait je n'ai pas réussi à accéder à un élément du vecteur.
Pour le vecteur d'origine vSommetsCube, il suffit de aElement = vSommetsCube[i];
comment faire avec vSommets ?

Merci.
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
(*vSommetsCube)[i]
, c'est ça le désavantage des pointeurs... Ou alors utilise une autre fonction (voire une fonction lambda) avec une référence, comme ça:
void faire_traitement(std::vector<TYPE> &vSommetsCube) {
    ...
    aElement = vSommetsCube[i]
    ...
}

void demarrer_traitement() {
    faire_traitement(bCube ? &vSommetsCube : vSommetsOcta);
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PasqualiniG Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai l'impression qu'il n'y a pas de solution aussi simple que je l'imaginais.
Ce qui me surprend c'est que vSommets->size() donne le bon résultat. C'est à, dire qu'il donne bien le nombre d'éléments de vSommetsCube ou de vSommets Octa.

Dans le cas particulier qui me concerne les vecteurs sont de petite taille, 8 et 6 fois 3 "double". Je pense que écrire vSommets = vSommetsCube prendra finalement un temps négligeable dans la durée dub traitement.

Merci d'avoir porter attention à mon problème.
0
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
Bonjour je n'ai pas bien compris, que veux-tu dire par temps négligeable de traitement
à bientôt
0