Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5768 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Concaténer deux vector

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Concaténer deux vector

n°1727286
sebdu94
Posté le 01-05-2008 à 16:54:47  profilanswer
 

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

mood
Publicité
Posté le 01-05-2008 à 16:54:47  profilanswer
 

n°1727301
Joel F
Real men use unique_ptr
Posté le 01-05-2008 à 17:40:23  profilanswer
 

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

n°1727314
IrmatDen
Posté le 01-05-2008 à 18:41:23  profilanswer
 

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

n°1727334
Joel F
Real men use unique_ptr
Posté le 01-05-2008 à 19:50:31  profilanswer
 

pourquoi j'oublie trjrs back_inserter [:pingouino]

n°1727339
0x90
Posté le 01-05-2008 à 20:18:09  profilanswer
 

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.
n°1727357
Joel F
Real men use unique_ptr
Posté le 01-05-2008 à 20:44:43  profilanswer
 

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

n°1727360
IrmatDen
Posté le 01-05-2008 à 20:46:55  profilanswer
 

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
n°1727364
gilou
Modérateur
Modosaurus Rex
Posté le 01-05-2008 à 21:04:38  profilanswer
 

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! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°1727366
IrmatDen
Posté le 01-05-2008 à 21:05:44  profilanswer
 

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

n°1727368
gilou
Modérateur
Modosaurus Rex
Posté le 01-05-2008 à 21:07:17  profilanswer
 

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! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
mood
Publicité
Posté le 01-05-2008 à 21:07:17  profilanswer
 

n°1727378
sebdu94
Posté le 01-05-2008 à 21:39:02  profilanswer
 

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

n°1727382
Joel F
Real men use unique_ptr
Posté le 01-05-2008 à 21:47:46  profilanswer
 

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.

n°1727387
IrmatDen
Posté le 01-05-2008 à 21:54:49  profilanswer
 

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

n°1727981
jesus_chri​st
votre nouveau dieu
Posté le 03-05-2008 à 16:01:32  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Concaténer deux vector

 

Sujets relatifs
Vector en C++ - Optimisation de la recherche[C/C++] Copie d'un std::vector
[Résolu] porté d'une variable vectorProblème avec vector lors de l'exécution du programme
Concatener tous mes classeurs ouverts EXCELConcaténer deux lignes sous Access ?
(Resolut) pb concatenation DOSconcatener des chaines
comment supprimer un élément d'un std::vector[ADA - débutant] Concaténer 2 listes
Plus de sujets relatifs à : Concaténer deux vector


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)