[c++] inversione di un vettore

Appinmate
Buongiorno a tutti! Avrei un problema con questo esercizio:
#include <iostream>
#include <math.h>
#include <vector>
#include <stdlib.h>
using namespace std;

void inverti(vector<int>& v)
{int i,l=v.size(),j;int temp;
for(i=0,j=l-1;i<j;i=i+1,j=j-1)
 {int temp=v[i];v[i]=v[j];v[j]=temp;
 }

int main () {
vector<int> V(3,0),W(4,0),Z(3,0),T(7,0);
 V[0]=1;V[1]=2;V[2]=1;
 W[0]=1;W[1]=2;W[2]=2;W[3]=1;
 Z[0]=1;Z[1]=2;Z[2]=2;
 T[0]=1;T[1]=2;T[2]=3;T[3]=-3;T[4]=2;T[5]=1;T[6]=10;
 cout << "inverti V "; inverti(V);
 cout << "inverti W ";inverti(W);
 cout << "inverti Z ";inverti(Z);
 cout << "Inverti T "; inverti(T);
 system("pause");}

questo sarebbe il codice che ho utilizzato per invertire un vettore ma non mi viene giusto.Qualcuno sa spiegarmi il perché? Grazie in anticipo :) (avevo pensato di inserire un
cout <<temp;
all'interno del for ma non mi viene comunque giusto.Qulcuno potrebbe anche spiegarmi il perché
cout << temp;
non va bene? Grazie in anticipo :)

Risposte
Super Squirrel
Innanzitutto al fine di rendere il codice più chiaro e leggibile ti consiglio di rispettare l'indentazione e la spaziatura.
In ogni caso:
- le librerie math e stdlib non servono;
- evita di utilizzare system("pause"), peraltro se lanci il programma tramite IDE non serve;
- nella funzione inverti() c'è qualcosa che non torna con le graffe;
- al posto di i=i+1 e j=j-1 puoi utilizzare gli operatori di incremento e decremento.

Detto ciò il codice diventerebbe qualcosa del genere:
#include <iostream>
#include <vector>

using namespace std;

void inverti(vector<int> &v)
{
    int i;
    int j;
    int temp;
    for(i = 0, j = v.size() - 1; i < j; ++i, --j)
    {
        temp = v[i];
        v[i] = v[j];
        v[j] = temp;
    }
 }

int main()
{
    vector<int> V(5,0);
    V[0] = 1;
    V[1] = 2;
    V[2] = 3;
    V[3] = 4;
    V[4] = 5;
    cout << "inverti V "; 
    inverti(V);
 }


La funzione inverti() deve occuparsi di invertire il vettore, non di mostrarlo... a tal fine basta implementare una funzione stampa_vettore().

Per la cronaca, dal punto di vista logico la funzione inverti() è funzionante, ma potrebbe essere riscritta utilizzando il solo indice i.

Appinmate
Grazie.. ma perché devo mettere printvector? Ma lo devo aggiungere nel void? Scusa le domande probabilmente molto banali ma frequento un cdl in mate e questo è il primo esame che devo dare di info.. :oops:

Super Squirrel
Tornando al post iniziale
questo sarebbe il codice che ho utilizzato per invertire un vettore ma non mi viene giusto.Qualcuno sa spiegarmi il perché?

Che intendi con non mi viene giusto? Il fatto che il vettore invertito non venga mostrato è ovvio, perchè non c'è nessun frammento di codice che se ne occupi.
avevo pensato di inserire un
cout < all'interno del for ma non mi viene comunque giusto. Qulcuno potrebbe anche spiegarmi il perché

Senza entrare troppo nei "dettagli", quel for, per un vettore di 5 elementi, esegue due iterazioni, quindi anche se metti un cout mostrerà solo 2 dei 5 elementi.
ma perché devo mettere printvector? Ma lo devo aggiungere nel void?

In che senso? Sai cosa sono le funzioni?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.