Ho una funzione di rotazione funzionante per il mio array int "items". Il codice qui sotto lo fa, tranne che im trasferire valori inutilmente. Sto cercando di ottenere la rotazione "inplace". Quello che intendo è che i ptrs aumenterebbero o diminuiranno invece di prendere i valori dall'array. Con quale ho bisogno di "alzare" il livello di efficienza in questo modo per questo metodo .. Qualche suggerimento?In Place rotation C++ Practice
void quack::rotate(int nRotations)
{
if (count <= 1) return;
else // make sure our ptrs are where we want them.
{
intFrontPtr = &items[0].myInt;
intBackPtr = &items[count-1].myInt;
}
for (int temp = 0; nRotations != 0;)
{
if (nRotations > 0)
{
temp = *intFrontPtr;
*intFrontPtr = *intBackPtr;
*intBackPtr = temp; // Connect temps for the rotation
--intBackPtr; // Move left [...<-] into the array
}
else if (nRotations < 0)
{
temp = *intBackPtr;
*intBackPtr = *intFrontPtr;
*intFrontPtr = temp; // Connect temps for the rotation
++intFrontPtr; // Move right [->...] into the array
}
if (intBackPtr == &items[0].myInt ||
intFrontPtr == &items[count-1].myInt)
{
intFrontPtr = &items[0].myInt;
intBackPtr = &items[count-1].myInt; // need to re-set
if (nRotations > 0) nRotations--; // Which ways did we rotate?
else nRotations++;
}
}
}
Oh sì, Im cercando di praticare C++ e conoscere loro sono molte funzioni che galleggiano intorno che sono programmati per fare questo già ... Im cercando di "costruire il mio". Penso di aver capito sinteticamente, ma l'efficienza è sempre dove faccio fatica. Come, un novizio, Io apprezzo molto maggiori critiche nei confronti di questo aspetto ..
Non è che la rotazione della matrice per la sinistra? –
Sì. Errore di battitura fisso. – sdtom
ottimo trucco. Sebbene tu stia sempre spostando un elemento due volte mentre può essere fatto in un colpo solo. – Toad