利用void指標實現無視型別排序

2021-09-21 11:05:34 字數 1722 閱讀 8911

直接插入排序,一般實現都是對int型資料進行排序,如果我需要對double陣列、string陣列呢?

下面是乙個利用void指標進行的型別無關插入排序

**:#include

#include//malloc

#include//memcpy

#include

#include//iterator_traits

using std::endl;

using std::cout;

using std::string;

using std::vector;

bool intless(void *x, void *y)

bool doubleless(void *x, void *y)

bool stringless(void *x, void *y)

void insertsort(void *arr,                       //待排序陣列

const int length,                     //陣列長度

const size_t elemsize,            //數字元素大小

bool (*less)(void *, void *))

memcpy((char*)arr + (j+1) * elemsize,

elemtoinsert, elemsize);

}free(elemtoinsert);

}template

void displayarr(const iterator &beg, const iterator &end)

int main(int argc, char **ar**);

double doublearr = ;

string stringarr = ;

cout<<"排序前:"<

displayarr(intarr, intarr + sizeof(intarr)/sizeof(*intarr));

displayarr(doublearr, doublearr + sizeof(doublearr)/sizeof(*doublearr));

displayarr(stringarr, stringarr + sizeof(stringarr)/sizeof(*stringarr));

//開始插入排序

insertsort(intarr, sizeof(intarr)/sizeof(*intarr), sizeof(int), intless);

insertsort(doublearr, sizeof(doublearr)/sizeof(*doublearr), sizeof(double), doubleless);

insertsort(stringarr, sizeof(stringarr)/sizeof(*stringarr), sizeof(string), stringless);

cout<<"\n排序後:"<

displayarr(intarr, intarr + sizeof(intarr)/sizeof(*intarr));

displayarr(doublearr, doublearr + sizeof(doublearr)/sizeof(*doublearr));

displayarr(stringarr, stringarr + sizeof(stringarr)/sizeof(*stringarr));

}

利用void指標實現無視型別排序

直接插入排序,一般實現都是對int型資料進行排序,如果我需要對double陣列 string陣列呢?下面是乙個利用void指標進行的型別無關插入排序 include include malloc include memcpy include include iterator traits using...

void型別及void指標型別

許多初學者對c c 語言中的void及void指標型別不甚理解,因此在使用上出現了一些錯誤。本文將對void關鍵字的深刻含義進行解說,並詳述void及void指標型別的使用方法與技巧。2.void的含義 void的字面意思是 無型別 void 則為 無型別指標 void 可以指向任何型別的資料。vo...

void及void指標型別

1.概述 許多初學者對c c 語言中的void及void指標型別不甚理解,因此在使用上出現了一些錯誤。本文將對void關鍵字的深刻含義進行解說,並 詳述void及void指標型別的使用方法與技巧。2.void的含義 void的字面意思是 無型別 void 則為 無型別指標 void 可以指向任何型別...