W
Wayne Shu
The code is below:
#include <iostream>
#include <functional>
template <typename T, typename FUN>
void insert_sort(T *arr, size_t size, FUN f = std::less<T>())
{
for( int j = 1; j < size; j++ ){
type key = arr[j];
int i = j - 1;
while( i >= 0 && f(arr, key) ){
arr[i+1] = arr;
i = i - 1;
}
arr[i+1] = key;
}
}
template <typename T>
void display(std:stream &out, const T *arr, size_t size)
{
out << "<";
for(size_t i = 0; i < size; ++i){
out << arr << ((i == size - 1) ? ">" : " ");
}
}
int main()
{
const int iarr[] = { 9, 8, 56, 784, 2, 7, 89, 4 };
const double darr[] = { 7.8, 89.2, 45.0, 44.0, 9.6, 78.4, 999.0 };
int *piarr = new int[sizeof(iarr) / sizeof(int)];
double *pdarr = new double[sizeof(darr) / sizeof(double)];
std::cout << "before sort:\n";
display(std::cout, iarr, sizeof(iarr) / sizeof(int));
// test for insert sort
memcpy(piarr, iarr, sizeof(iarr));
insert_sort(piarr, sizeof(iarr) / sizeof(int));
std::cout << "after insort sort:\n";
display(std::cout, piarr, sizeof(iarr) / sizeof(int));
// test for insert sort
memcpy(pdarr, darr, sizeof(darr));
insert_sort(pdarr, sizeof(darr) / sizeof(double));
std::cout << "after insort sort:\n";
display(std::cout, pdarr, sizeof(darr) / sizeof(int));
delete[] piarr;
delete[] pdarr;
return 0;
}
What's wrong??
Why the default arguement doesn't work??
Thanks.
Regards
Wayne Shu
#include <iostream>
#include <functional>
template <typename T, typename FUN>
void insert_sort(T *arr, size_t size, FUN f = std::less<T>())
{
for( int j = 1; j < size; j++ ){
type key = arr[j];
int i = j - 1;
while( i >= 0 && f(arr, key) ){
arr[i+1] = arr;
i = i - 1;
}
arr[i+1] = key;
}
}
template <typename T>
void display(std:stream &out, const T *arr, size_t size)
{
out << "<";
for(size_t i = 0; i < size; ++i){
out << arr << ((i == size - 1) ? ">" : " ");
}
}
int main()
{
const int iarr[] = { 9, 8, 56, 784, 2, 7, 89, 4 };
const double darr[] = { 7.8, 89.2, 45.0, 44.0, 9.6, 78.4, 999.0 };
int *piarr = new int[sizeof(iarr) / sizeof(int)];
double *pdarr = new double[sizeof(darr) / sizeof(double)];
std::cout << "before sort:\n";
display(std::cout, iarr, sizeof(iarr) / sizeof(int));
// test for insert sort
memcpy(piarr, iarr, sizeof(iarr));
insert_sort(piarr, sizeof(iarr) / sizeof(int));
std::cout << "after insort sort:\n";
display(std::cout, piarr, sizeof(iarr) / sizeof(int));
// test for insert sort
memcpy(pdarr, darr, sizeof(darr));
insert_sort(pdarr, sizeof(darr) / sizeof(double));
std::cout << "after insort sort:\n";
display(std::cout, pdarr, sizeof(darr) / sizeof(int));
delete[] piarr;
delete[] pdarr;
return 0;
}
What's wrong??
Why the default arguement doesn't work??
Thanks.
Regards
Wayne Shu