OVH Cloud OVH Cloud

copier un tableau statique dans un vecteur

6 réponses
Avatar
Michaël Delva
Bonsoir à tous,

imaginons le tableau suivant:

int stats_attaque[3] = { 8,11,14 };

et le vecteur std::vector<int> toto;

je voudrais utiliser std::copy pour copier les éléments du premier dans le
deuxième, mais je ne sais pas quoi mettre pour les deux premiers
arguments...

Merci d'avance

Mike

6 réponses

Avatar
Fabien LE LEZ
On 24 Feb 2004 18:15:39 GMT, "Michaël Delva"
wrote:

int stats_attaque[3] = { 8,11,14 };

et le vecteur std::vector<int> toto;

je voudrais utiliser std::copy pour copier les éléments du premier dans le
deuxième, mais je ne sais pas quoi mettre pour les deux premiers
arguments...


int const nb_elements_stats_attaque= sizeof (stats_attaque) / sizeof
(stats_attaque[0]);

toto.resize (nb_elements_stats_attaque);
copy (stats_attaque, stats_attaque+nb_elements_stats_attaque,
toto.begin());

Ou :

toto.reserve (nb_elements_stats_attaque);
copy (stats_attaque, stats_attaque+nb_elements_stats_attaque,
back_inserter (toto));


--
;-)

Avatar
Michaël Delva
Fabien LE LEZ wrote in
news::

int const nb_elements_stats_attaque= sizeof (stats_attaque) / sizeof
(stats_attaque[0]);

toto.resize (nb_elements_stats_attaque);
copy (stats_attaque, stats_attaque+nb_elements_stats_attaque,
toto.begin());

Ou :

toto.reserve (nb_elements_stats_attaque);
copy (stats_attaque, stats_attaque+nb_elements_stats_attaque,
back_inserter (toto));




C'est ce que j'avais fait, mais il me semblait qu'il y avait une autre
méthode...

Merci!!

Avatar
kanze
Fabien LE LEZ wrote in message
news:...
On 24 Feb 2004 18:15:39 GMT, "Michaël Delva"
wrote:

int stats_attaque[3] = { 8,11,14 };

et le vecteur std::vector<int> toto;

je voudrais utiliser std::copy pour copier les éléments du premier
dans le deuxième, mais je ne sais pas quoi mettre pour les deux
premiers arguments...


int const nb_elements_stats_attaque= sizeof (stats_attaque) / sizeof
(stats_attaque[0]);

toto.resize (nb_elements_stats_attaque);
copy (stats_attaque, stats_attaque+nb_elements_stats_attaque,
toto.begin());

Ou :

toto.reserve (nb_elements_stats_attaque);
copy (stats_attaque, stats_attaque+nb_elements_stats_attaque,
back_inserter (toto));


Ou simplement :

std::vector< int > toto( begin( stats_attaque ),
end( stats_attaque ) ) ;

avec la classique :

template< typename T, size_t N >
T*
begin( T (&array)[ N ] )
{
return array ;
}

template< typename T, size_t N >
T*
end( T (&array)[ N ] )
{
return array + N ;
}

(et les équivalents const -- j'aimerais bien savoir un jour pourquoi les
versions const sont nécessaire, et que les versions ci-dessus ne
marchent pas pour T == int const.)

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


Avatar
Gabriel Dos Reis
writes:

| (et les équivalents const -- j'aimerais bien savoir un jour pourquoi les
| versions const sont nécessaire, et que les versions ci-dessus ne
| marchent pas pour T == int const.)

Je crois que je t'ai déjà expliqué.

-- Gaby
Avatar
Fabien LE LEZ
On 25 Feb 2004 02:33:46 -0800, wrote:

std::vector< int > toto( begin( stats_attaque ),
end( stats_attaque ) ) ;


J'y avais pensé, mais d'après le message d'origine le vector<> toto
est déjà créé.

--
;-)

Avatar
Michaël Delva
Fabien LE LEZ wrote in
news::

On 25 Feb 2004 02:33:46 -0800, wrote:

std::vector< int > toto( begin( stats_attaque ),
end( stats_attaque ) ) ;


J'y avais pensé, mais d'après le message d'origine le vector<> toto
est déjà créé.



exact...