Mi sono accorto che la funzione di prima era sbagliata, questa versione dovrebbe essere giusta e almeno in teoria dovrebbe fare esattamente quello che chiede il codice, utilizzando carta e penna e seguendo i passaggi, alla fine il vettore risultante dovrebbe essere alternato proprio come dice l'esercizio... Solo che nel programma l'eseguibile viene lanciato e rimane l'interfaccia testuale nera, senza che appaia nulla nello schermo... Come mai?
codice:
#include<iostream>
#include<vector>
using namespace std;
vector <int> merge (vector <int> a, vector <int> b)
{
vector <int> c (a.size()+ b.size());
int j = 0;
int i = 0;
int k = 1;
int f = 0;
int temp;
if (a.size() < b.size())
{
for (i; k < c.size()-1;i++)
{
while (i<a.size())
{temp = a[i];
c[i+f] = temp;
c.push_back(temp);}
c[k] = b[j];
c.push_back(b[j]);
j++;
f++;
k = k+2;} return c;
}
else
if (b.size() < a.size())
{
for (i; k < c.size()-1;i++)
{
while (i<b.size())
{temp = b[i];
c[i+f] = temp;
c.push_back(temp);}
c[k] = a[j];
c.push_back(a[j]);
j++;
f++;
k = k+2;} return c;
}
}
void print (vector <int> s)
{ for (int i=0; i<s.size();i++)
cout << s[i] << endl;
}
int main()
{
vector <int> a(4);
a[0]=1;
a[1]=4;
a[2]=9;
a[3]=16;
vector <int> b(5);
b[0]=9;
b[1]=7;
b[2]=4;
b[3]=9;
b[4]=11;
cout << endl;
vector <int> c;
cout << endl;
c = merge (a,b);
print (c);
return 0;
}