Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

initialiser un tableau conditionnellement

12 réponses
Avatar
Xavier
Bonjour,

J'ai besoin de conseils sur la meilleure facon d'initialiser un tableau au
sein d'une structure if...
J'utilise différents tableaux avec des valeurs définies (dates d'echéanier,
valeur de tranches...) et je pensais les initialier ainsi (adEch contient
ici par exemple différentes dates d'échéance):

if (bMens)
double adEch[] = {15.01, 15.02, 15.03, 15.04, 15.05, 15.05};
else
double adEch[] = {15.03, 15.06};

cout << adEch[0] <<endl;

Seulement je ne peux accéder aux tableaux ensuite vu que adEch est déclaré
et initialisé au sein de l'expression conditionelle (error C2065: adEch non
déclaré). La solution serait éventuellement de déclarer un tableau adTmp[]
avant et de copier au sein des conditions ces tableaux mais vu que la taille
des tableaux initialisé n'est pas toujours la même ce n'est pas si simple...
Comment faite vous pour initialiser rapidement des tableaux dans ce cas ?
Auriez vous quelques idées...
Merci
Xavier

2 réponses

1 2
Avatar
James Kanze
On Mar 23, 4:38 pm, "Xavier" wrote:

Reste une question : Pourquoi si je déclare une variable au sein d'un if
else, celle ci n'est pas accessible apres (c'est possible en VB mais pas en
C++; ou est ce une question de reglage du compilateur?)


Et qu'est-ce que voudrait dire quelque chose comme :

if ( condition ) {
double v[ 20 ] ;
// ..
}
std::cout << v[ 0 ] ;

si condition était fausse ?

On peut utiliser des conditions dans les définitions, dans
l'expression d'initialisation :

std::vector< double > v( condition ? 10 : 20 ) ;

par exemple. Ou comme j'ai déjà montré :

std::vector< double > v( cond ? begin( t1 ) : begin( t2 ),
cond ? end ( t1 ) : end ( t2 ) ) ;

Et un regret: Dommage que la STL ne propose par un constructeur pour
initialiser un vecteur de la sorte:
std::vector<double> vEch (15.01, 15.02, 15.03, 15.04, 15.05, 15.05);!!!


Je crois qu'il y a une proposition en considération pour le
faire. Mais ça suppose une certaine collaboration entre le
langage et la bibliothèque, je crois.

--
James Kanze (Gabi Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
James Kanze
On Mar 23, 9:23 pm, Sylvain wrote:
Xavier wrote on 23/03/2007 13:59:

J'utilise différents tableaux avec des valeurs définies (dates d'ec héanier,
valeur de tranches...) et je pensais les initialier ainsi (adEch contie nt
ici par exemple différentes dates d'échéance):

if (bMens)
double adEch[] = {15.01, 15.02, 15.03, 15.04, 15.05, 15.05};
else
double adEch[] = {15.03, 15.06};

cout << adEch[0] <<endl;

Seulement je ne peux accéder aux tableaux ensuite vu que adEch est d éclaré
et initialisé au sein de l'expression conditionelle [...]


static double adEch6[] = {15.01, 15.02, 15.03, 15.04, 15.05, 15.05};
static double adEch2[] = {15.03, 15.06};

double* ech = (bMens) ? adEch6 : adEch2;

cout << ech[0] <<endl;


Sans des const, on risque d'initialiser avec une valeur
différente chaque fois.

--
James Kanze (Gabi Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


1 2