Comprensione di un metodo insert

di il
2 risposte

Comprensione di un metodo insert

Salve a tutti, ho da completare del codice in C, e dovrei capire cosa scrivere anche basandomi sulla parte che ho già, il problema è che non riesco a capire il funzionamento del metodo. Non vi chiedo di completarmi il codice, ma di spiegarmi il funzionamento della parte nota in modo da provare ad arrivarci da solo, non mi piace farmi fare le cose.
Il codice è questo

void v_insert_n(vector_type v,iterator start_i,unsigned n,void* new_val){
    char null[v->e_sz];
    int inserted, moved, to_insert, to_move;

    if ( n==0 ) /*** nothing to insert ***/
    	return;
    if ( v == NULL )
    	fail("v_insert_n(): no such vector");
    if ( start_i == iterator_end )
    	start_i = v->no_e;
    if ( start_i < 0 )
    	fail("v_insert_n(): bad iterator");
    if ( start_i >= v->no_e ) {
    	memset((void*)null,0,v->e_sz);
        while ( start_i > v->no_e ) /*** fill-in the gap with zero elements ***/
            v_push_back(v,(void*)null);
        /*** insert new elements at index >= v->no_e ***/
        for ( inserted=0 ; inserted < n ; inserted++ )
            v_push_back(v,new_val);
        return;
      }
    /*** otherwise, we have to move some elements first, in order to make space ***/
    moved = (v->no_e);
    to_move = moved - start_i;
    to_insert = n;
#ifdef DEBUG
    printf(" ... v_insert_n(%1d): moved=%1d, to_move=%1d, start_i=%1d\n",
           n,moved,to_move,start_i);
#endif
    for ( inserted = 0 ; (to_move+inserted) < n ; inserted++, to_insert-- )
        v_push_back(v,new_val);
#ifdef DEBUG
    printf(" ... v_insert_n(%1d): inserted=%1d\n",n,inserted);
#endif
    for ( to_move = moved ; to_move >= start_i && inserted < n ; inserted++, to_move-- );
    for ( inserted = 0 ; to_move < moved ; inserted++, to_move++ ) {
#ifdef DEBUG
        printf("    ... v_insert_n(%1d): pushing_back %1d\n",n,to_move);
#endif
        v_push_back(v, v->e_array + (v->e_sz) * to_move );
      }

    /*** move possibly remaining elements and then add the new ones ***/
    for ( moved -= inserted ; moved-- > start_i ; ) {
#ifdef DEBUG
        printf("    ... v_insert_n(%1d): moving %1d to %1d\n",n,moved,moved+n);
#endif

/*** TO BE DONE START ***/



/*** TO BE DONE END ***/

      }

    while ( to_insert-- > 0 ) {
#ifdef DEBUG
        printf("    ... v_insert_n(%1d): inserting %1d\n",n,start_i+to_insert);
#endif

/*** TO BE DONE START ***/


/*** TO BE DONE END ***/

      }
}
Principalmente non capisco la parte dopo il primo #endif.

2 Risposte

  • Re: Comprensione di un metodo insert

    Ciao, hai altre parti del codice? per esempio le definizioni di iterator_end e di vector_type?
  • Re: Comprensione di un metodo insert

    Ciao, stavo per venire a scrivere che ho trovato una soluzione, ora però ho un altro problema nell'esecuzione di un test su tutto il codice, ci ragiono un attimo e vedo se farvi un'altra domanda.
    Grazie mille comunque

    UPDATE: Ok avevo fatto un errore idiota in una moltiplicazione, ora funziona tutto Potete chiudere
Devi accedere o registrarti per scrivere nel forum
2 risposte