Comprensione di un metodo insert

di Anonimizzato20009 il
2 risposte
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

  • Ciao, hai altre parti del codice? per esempio le definizioni di iterator_end e di vector_type?
  • 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