Przesunięcie elementów tablicy w lewo i w prawo 
Ostatnio zmodyfikowano 2017-11-01 16:27
| YooSy | » 2017-11-01 14:59:21 Pokaż kod. | 
|  | 
| koot Temat założony przez niniejszego użytkownika | » 2017-11-01 15:03:10 @YooSy Już znalazłem swój błąd. Także wszystko działa niemal idealnie. Dzięki! | 
|  | 
| koot Temat założony przez niniejszego użytkownika | » 2017-11-01 15:16:28 @YooSy Mam tylko jeszcze jedno pytanie.Czy da się to zmodyfikować tak, żeby pierwotna kolejność elementów parzystych względem siebie była zachowana?
 | 
|  | 
| pekfos | » 2017-11-01 16:18:35 Użyj po prostu std::stable_partition. | 
|  | 
| Elaine | » 2017-11-01 16:27:04 | Użyj po prostu std::stable_partition. | 
 Ahem: | Nie mogę utworzyć nowej tablicy. Jednym z wymogów zadania jest to, by modyfikować tę już istniejącą. | 
 | W ogóle nie rozumiem tego kodu. Chyba yba jest za skomplikowany dla mnie. Powinienem to zrobić jakimś prostym przesunięciem, tylko nie wiem jak.. | 
 Da się to zrobić w miejscu — std::stable_partition  jeśli tylko może alokuje osobną tablicę, bo tak jest szybciej — tylko algorytm nie jest do końca oczywisty, polecam prześledzić sobie wykonanie w debuggerze:  int * stable_odd_even_partition( int * array, std::size_t length ){
 if( length == 0 ) {
 return array;
 }
 if( length == 1 ) {
 return array +( array[ 0 ] % 2 != 0 );
 }
 const auto mid = array + length / 2;
 const auto even_start_1 = stable_odd_even_partition( array, length / 2 );
 const auto even_start_2 = stable_odd_even_partition( mid, length - length / 2 );
 return std::rotate( even_start_1, mid, even_start_2 );
 }
 | 
|  | 
| 1 « 2 » |