Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: indict en 16 Julio 2013, 20:37 pm



Título: fusionar dos vectores
Publicado por: indict en 16 Julio 2013, 20:37 pm
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
  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4.  
  5. vector<int>fusion(vector<int>v1,vector<int>v2){
  6. int i=0; int j; vector<int>v;
  7. if(v1.size()>v2.size()){
  8.         while(i<v2.size()){
  9.                          v.push_back(v1[i]);
  10.                          v.push_back(v2[i]);
  11.                            }      
  12.         j=v.size()/2;
  13.         while(i<v1.size()){
  14.                          v.push_back(v1[i]);  
  15.                            }        
  16.                             }
  17. else if(v1.size()<v2.size()){    
  18.      while(i<v1.size()){
  19.      v.push_back(v1[i]);
  20.      v.push_back(v2[i]);
  21.                            }      
  22.         j=v.size()/2;
  23.         while(i<v2.size()){
  24.                          v.push_back(v2[i]); }}
  25. else{
  26.       while(i<v1.size()){
  27.      v.push_back(v1[i]);
  28.      v.push_back(v2[i]);
  29.                            }}
  30.                             return v;   }
  31.  
  32.  
  33. int main(){ int n1,n2,e;
  34.    cout<<"introduzca el tamaño de v1"<<endl;
  35.    cin>>n1;
  36.    vector<int>v1(n1);
  37.    for(int i=0;i<n1;i++){
  38.            cout<<"el elemento"<<" "<<i<<endl;
  39.            cin>>e;
  40.            }
  41.  
  42.    cout<<"introduzca el tamaño de v2"<<endl;
  43.    cin>>n2;
  44.    vector<int>v2(n2);
  45.    for(int i=0;i<n2;i++){
  46.            cout<<"el elemento"<<" "<<i<<endl;
  47.            cin>>e;
  48.            }  
  49.    vector<int>u=fusion(v1,v2);
  50.    cout<<"[";
  51.    for(int i=0;i<u.size();i++){
  52.            cout<<u[i]<<endl;
  53.            }
  54.    cout<<"]"<<endl;  
  55.  
  56.    system ("pause");
  57.    return 0;}


Título: Re: fusionar dos vectores
Publicado por: eferion en 16 Julio 2013, 22:29 pm
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.


Título: Re: fusionar dos vectores
Publicado por: Danyfirex en 17 Julio 2013, 21:27 pm
Puedes hacer algo asi.


Código
  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4.  
  5.  
  6.  
  7. int main(){
  8.     int n1,n2,e;
  9.    cout<<"introduzca el tamaño de v1"<<endl;
  10.    cin>>n1;
  11.    vector<int>v1(n1);
  12.    for(int i=0;i<n1;i++){
  13.            cout<<"el elemento"<<" "<<i<<endl;
  14.            cin>>v1[i];
  15.            }
  16.  
  17.  
  18.    cout<<"introduzca el tamaño de v2"<<endl;
  19.    cin>>n2;
  20.    vector<int>v2(n2);
  21.    for(int i=0;i<n2;i++){
  22.            cout<<"el elemento"<<" "<<i<<endl;
  23.            cin>>v2[i];
  24.            }
  25.  
  26. //nuevo vector con los arrays concatenados          
  27. vector<int>newvector;
  28. newvector.reserve( v1.size()+v2.size());
  29. newvector.insert( newvector.end(), v1.begin(), v1.end() );
  30. newvector.insert( newvector.end(), v2.begin(), v2.end() );
  31.  
  32.  
  33.    cout<<"[";
  34.    for(int i=0;i<newvector.size();i++){
  35.            cout<<newvector[i]<<endl;
  36.            }
  37.    cout<<"]"<<endl;
  38.  
  39.  
  40.    return 0;}
  41.  


Saludos

edito:

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