Concaténer deux vector

Concaténer deux vector - C++ - Programmation

Marsh Posté le 01-05-2008 à 16:54:47    

Bonjour,
 
existe-t-il une méthode pour concaténer deux vector ?
 
 
Merci beaucoup

Reply

Marsh Posté le 01-05-2008 à 16:54:47   

Reply

Marsh Posté le 01-05-2008 à 17:40:23    

tu itéres sur les éléments du 2e que tu .push_back() dans le 1e

Reply

Marsh Posté le 01-05-2008 à 18:41:23    

Salut,
 
Tu peux aussi utiliser std::copy + std::back_inserter pour éviter de le faire toi même.

Reply

Marsh Posté le 01-05-2008 à 19:50:31    

pourquoi j'oublie trjrs back_inserter [:pingouino]

Reply

Marsh Posté le 01-05-2008 à 20:18:09    

Y'a des effets secondaires génants à écrire quelque chose du genre ? :
 

Code :
  1. #include <vector>
  2. #include <list>
  3. #include <iostream>
  4.  
  5. // operator += qui permet l'hétérogénéité des types
  6. template <
  7.     typename T,
  8.     typename DestAlloc,
  9.     template <typename, typename> class DestCont,
  10.     typename SrcAlloc,
  11.     template <typename, typename> class SrcCont>
  12. DestCont<T, DestAlloc> & operator+=(DestCont<T, DestAlloc>& dest, const SrcCont<T, SrcAlloc>& src) {
  13.   std::copy(src.begin(), src.end(), std::back_inserter(dest));
  14.   return dest;
  15. }
  16.  
  17. int main() {
  18.     std::vector<int> a;
  19.     std::list<int> b;
  20.     for (int i=0; i<10; ++i) a.push_back(i*i);
  21.     for (int i=0; i<10; ++i) a.push_back(i+i);
  22.     a += b;
  23.     return 0;
  24. }


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 01-05-2008 à 20:44:43    

1/ valarray a deja un +=
2/ apres je sais pas si += est definsisable en fonction libre

Reply

Marsh Posté le 01-05-2008 à 20:46:55    

Là, ça dépend ce qu'on sous-entend par "+=":
> concaténation de liste
> modification des éléments de chaque a par a[i] += b[i]

 

C'est peut-être un poil tiré par les cheveux, mais dès qu'il y a un double sens plausible, j'y réfléchis à 2 fois... Mais bon, je pense que la 2nde possibilité est un peu trop tirée par les cheveux dans le cas présent :D

 

Edit: Tiens, première fois que j'entends parler de valarray :s
Ca sort d'où? (je ne la trouve pas sur SGi ni cplusplus.com, mais sur la msdn et la page d'un compilo IBM :/

Message cité 2 fois
Message édité par IrmatDen le 01-05-2008 à 20:51:20
Reply

Marsh Posté le 01-05-2008 à 21:04:38    

IrmatDen a écrit :

Edit: Tiens, première fois que j'entends parler de valarray :s

Par exemple dans The C++ Programming Language de Bjarne Stroustrup, comme une des classes de la STL, section 22.4 de la 3e Edition.
A+,


Message édité par gilou le 01-05-2008 à 21:05:47

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 01-05-2008 à 21:05:44    

Pfew, faut vraiment que je m'y recolle sur ce bouquin :sweat:

Reply

Marsh Posté le 01-05-2008 à 21:07:17    

Je suis justement en train de le relire (et de tout comprendre, ce qui serait une premiere)
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 01-05-2008 à 21:07:17   

Reply

Marsh Posté le 01-05-2008 à 21:39:02    

Merci pour vos réponses.  J'ai utilisé la méthode faites main ;).
Si j'avais su pour back_inserter plus tot, dommage !!

Reply

Marsh Posté le 01-05-2008 à 21:47:46    

IrmatDen a écrit :


C'est peut-être un poil tiré par les cheveux, mais dès qu'il y a un double sens plausible, j'y réfléchis à 2 fois... Mais bon, je pense que la 2nde possibilité est un peu trop tirée par les cheveux dans le cas présent :D


 
bah faut definir une semantique claire à tes entités et s'y tenir.
Perso += sur un conteneur c'est += sur chaque élément.

Reply

Marsh Posté le 01-05-2008 à 21:54:49    

Ah, c'était pas si tiré par les cheveux que ça si c'est tu l'utilises ainsi...

Reply

Marsh Posté le 03-05-2008 à 16:01:32    

IrmatDen a écrit :

Salut, Tu peux aussi utiliser std::copy + std::back_inserter pour éviter de le faire toi même.


 
Je suis un grand fan du back_inserter, mais pour un débutant, je conseille :
 

Code :
  1. std::vector< T > x;
  2. std::vector< T > y; // a copier dans x
  3. x.insert( x.end(), y.begin(), y.end() );


 
Je pense + facile à comprendre et résultat identique. Même si il faut éviter les exemples de .insert() sur un vecteur cas ce cas est un des rares qui n'impose pas des recopies dans tous les sens.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed