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;

}