Oppure

Loading
23/09/20 21:37
vale77777
visto che devo invertire solo una parte del vettore, mi chiedevo se fosse possibile fare
std::reverse(myvector.at(3),myvector.at(5));

o se lo devo per forza fare tra il primo e ultimo elemento, ho un vettore così fatto 1236547, devo invertire solo 654 e ottenere 1234567... ho provato ma mi fa errore
aaa
25/09/20 7:16
AldoBaldo
Non conosco STL abbastanza bene da risponderti in modo diretto.
Ipotizzando del tutto arbitrariamente che il tuo array contenga degli int, in C sarebbe semplice risolvere il "caso" con una funzione tipo quella che riporto qui sotto. Se scambi il tipo int con il tipo che ti interessa, penso che il procedimento potrebbe funzionare anche in C++. Certo è che se il tipo che devi usare riguarda oggetti per i quali la costruzione di copie è "impegnativa", lo scambio impostato nel ciclo for rischia di rivelarsi parecchio inefficiente.

#include <stdio.h>

/*==============================================================================
Inverte l'ordine degli elementi dell'array puntato da a compresi tra i limiti
p e u (inclusi).
E' responsabilita' del chiamante assicurarsi che i limiti p e u siano compresi
entro le dimensioni dell'array.

PARAMETRI
    a   array
    p   primo elemento della sezione da invertire
    u   ultimo elemento della sezione da invertire

VALORE DI RITORNO
    int     1 se l'operazione e' andata a buon fine
            0 se i parametri non sono accettabili
==============================================================================*/

int inverti_sezione_array( int *a, int p, int u ) {
    if( NULL!=a && p>=0 && u>=0 && p<=u ) {
        int l = p+(u-p+1)/2;   /* l: limite */

        for( ; p<l; ++p, --u ) {
            int t = a[p]; /* t: temporaneo */
            a[p] = a[u];
            a[u] = t;
        }

        return 1; /* tutto bene */
    }

    return 0; /* parametri non validi */
}

int main() {
    int serie[] = {1,2,3,6,5,4,7}; // serie di prova
    int i, qElSerie = 7; // qElSerie: quantita' degli elementi nella serie

    for( i=0; i<qElSerie; ++i )
        printf( "%d%c", serie[i], i<qElSerie-1?' ':'\n' );

    inverti_sezione_array( serie, 3, 5 ); /* non controllo il valore di   **
                                          ** ritorno perche' so per certo **
                                          ** che i parametri  sono validi */

    for( i=0; i<qElSerie; ++i )
        printf( "%d%c", serie[i], i<qElSerie-1?' ':'\n' );

    return 0;
}
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.