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

Adresse de tableau

4 réponses
Avatar
dug8C
Bonjour,

J'utilise vector pour gérer des objets dynamiquement mais j'ai une
fonction qui demande une adresse de tableau.

Pour récuperer cette adresse ( et donc le tableau) est-ce qu'il est
juste d'utiliser l'adresse du premier élément de mon vector?


int main ()
{
std::vector<TYPE> v;
TYPE* tableau = &v[0];
fonction(tableau);

return 0;

}

Ou bien dois-je faire une fonction:

void GetTab(TYPE* retour) const
{
for(std::vector<TYPE>::const_iterator It = v.begin(); It != v.end();
It++ )
{
*(retour++) = *It;
}

}

int main ()
{
std::vector v;
TYPE* tableau = 0;
GetTab(tableau);
fonction(tableau);
return 0;

}

Ou bien il existe autre chose ?

merci de vos réponses.

4 réponses

Avatar
Fabien LE LEZ
On 25 Oct 2004 04:56:59 -0700, (Dug):

Pour récuperer cette adresse ( et donc le tableau) est-ce qu'il est
juste d'utiliser l'adresse du premier élément de mon vector?


Oui. Mais il ne faut pas oublier de s'assurer que le tableau a la
bonne taille :

int main ()
{
std::vector<TYPE> v;


v.resize ( LA_TAILLE_QUI_VA_BIEN );

TYPE* tableau = &v[0];
fonction(tableau);


Note qu'on peut faire un peu plus court :

int main()
{
std::vector<TYPE> v (LA_TAILLE_QUI_VA_BIEN);
fonction (&v[0]);
...


--
;-)

Avatar
Fabien LE LEZ
On Mon, 25 Oct 2004 14:01:53 +0200, Fabien LE LEZ
:

Oui.


Note : ça ne marche qu'avec std::vector<>, pas avec les autres
conteneurs.


--
;-)

Avatar
dug
Fabien LE LEZ wrote in
news::

On Mon, 25 Oct 2004 14:01:53 +0200, Fabien LE LEZ
:

Oui.


Note : ça ne marche qu'avec std::vector<>, pas avec les autres
conteneurs.




Merci pour ta réponse :)
ça ne marche qu'avec vector, parce que vector arrange ses elements de
manière contigüe je suppose ?

Et resize c'est uniquement pour transmettre une partie du vector si j'ai
bien compris...


Avatar
Fabien LE LEZ
On 25 Oct 2004 19:25:53 GMT, dug :

ça ne marche qu'avec vector, parce que vector arrange ses elements de
manière contigüe je suppose ?


Oui.

Et resize c'est uniquement pour transmettre une partie du vector si j'ai
bien compris...


Non, c'est pour éviter de donner un tableau vide.
D'ailleurs, le code suivant a un comportement indéfini :

std::vector<Truc> v;
v[0]; // v a moins d'un élément, donc v[0] n'existe pas.


--
;-)