fusionar dos vectores

Iniciado por indict, 16 Julio 2013, 20:37 PM

0 Miembros y 1 Visitante están viendo este tema.

indict

Hola, querría hacer un programa que fusione dos vectores. Es decir
si v1 = 1,2,3,4 y v2 = 5,6,7,8,9 imprima v = 1,5,2,6,3,7,4,8,9

Hice esté código pero no me ejecuta nada.
Si pudieras decirme que falta para que funcione os lo agradecería :)

Código (cpp) [Seleccionar]
#include<iostream>
#include<vector>
using namespace std;

vector<int>fusion(vector<int>v1,vector<int>v2){
int i=0; int j; vector<int>v;
if(v1.size()>v2.size()){
         while(i<v2.size()){
                          v.push_back(v1[i]);
                          v.push_back(v2[i]);
                            }     
         j=v.size()/2;
         while(i<v1.size()){
                          v.push_back(v1[i]); 
                            }       
                             }
else if(v1.size()<v2.size()){     
      while(i<v1.size()){
      v.push_back(v1[i]);
      v.push_back(v2[i]);
                            }     
         j=v.size()/2;
         while(i<v2.size()){
                          v.push_back(v2[i]); }}
else{
       while(i<v1.size()){
      v.push_back(v1[i]);
      v.push_back(v2[i]);
                            }}
                             return v;   }


int main(){ int n1,n2,e;
    cout<<"introduzca el tamaño de v1"<<endl;
    cin>>n1;
    vector<int>v1(n1);
    for(int i=0;i<n1;i++){
            cout<<"el elemento"<<" "<<i<<endl;
            cin>>e;
            }
   
    cout<<"introduzca el tamaño de v2"<<endl;
    cin>>n2;
    vector<int>v2(n2);
    for(int i=0;i<n2;i++){
            cout<<"el elemento"<<" "<<i<<endl;
            cin>>e;
            } 
    vector<int>u=fusion(v1,v2);
    cout<<"[";
    for(int i=0;i<u.size();i++){
            cout<<u[i]<<endl;
            }
    cout<<"]"<<endl; 
   
    system ("pause");
    return 0;}

eferion

Tienes que incrementar las variables i,j en cada iteración para recorrer los dos vectores.

En mi humilde opinión yo usaría los buches while para situaciones en las que no puedo saber cuantas repeticiones va a tener un bucle.

Para bucles con un número conocido de repeticiones ( en este caso el tamaño del vector ), es mejor usar bucles for, ya que así es más difícil que se te pase incrementar la variable del índice.

Danyfirex

#2
Puedes hacer algo asi.


Código (cpp) [Seleccionar]
#include<iostream>
#include<vector>
using namespace std;



int main(){
    int n1,n2,e;
   cout<<"introduzca el tamaño de v1"<<endl;
   cin>>n1;
   vector<int>v1(n1);
   for(int i=0;i<n1;i++){
           cout<<"el elemento"<<" "<<i<<endl;
           cin>>v1[i];
           }


   cout<<"introduzca el tamaño de v2"<<endl;
   cin>>n2;
   vector<int>v2(n2);
   for(int i=0;i<n2;i++){
           cout<<"el elemento"<<" "<<i<<endl;
           cin>>v2[i];
           }
           
//nuevo vector con los arrays concatenados          
vector<int>newvector;
newvector.reserve( v1.size()+v2.size());
newvector.insert( newvector.end(), v1.begin(), v1.end() );
newvector.insert( newvector.end(), v2.begin(), v2.end() );


   cout<<"[";
   for(int i=0;i<newvector.size();i++){
           cout<<newvector[i]<<endl;
           }
   cout<<"]"<<endl;


   return 0;}



Saludos

edito:

Código (cpp) [Seleccionar]
cout<<"introduzca el tamaño de v1"<<endl;
    cin>>n1;
    vector<int>v1(n1);
    for(int i=0;i<n1;i++){
            cout<<"el elemento"<<" "<<i<<endl;
// se supone que aquí deberias llenado tu vector cin>>v1[i]; no e :S
            cin>>e;
            }