А почему в простую функцию типа:
| Код | void exchange(float * array, int idx1, int idx2) { float buffer = array[idx1]; /* обмен элементов */ array[idx1] = array[idx2]; /* с номерами */ array[idx2] = buffer; /* i и imax */ } void exchange(float &f1, ifloat &f2) { float buffer = f1; /* обмен элементов */ f1 = f2; /* с номерами */ f2 = buffer; /* i и imax */ }
|
Вообще конечно можно шаблоном для разных типов это сделать.
| Код | template <class T> void exchange(T* array, int idx1, int idx2) { T buffer = array[idx1]; /* обмен элементов */ array[idx1] = array[idx2]; /* с номерами */ array[idx2] = buffer; /* i и imax */ }
template <class T> void exchange( T &f1,T &f2) { T buffer = f1; /* обмен элементов */ f1 = f2; /* с номерами */ f2 = buffer; /* i и imax */ }
|
Но я бы например макрос написал (Хоть знаю, что С++ шники макросы не любят, но ИМХО тут подходит )
| Код | #define exchange(array,a,b) {int *ai=(int*)(&array[a]); int *bi=(int*)(&array[b]); (*ai)^=(*bi);(*bi)^=(*ai);(*ai)^=(*bi);} //вызов: exchange(buffer,i,imax);
|
Ты не смотри, что буков много. Компилер это соптимирует практически в 3 строки
Добавлено @ 00:15 O, Kuvaldis дело говорит, нефиг велик изобретать )) |