c函数模板实现
实现冒泡排序模板
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define LEN 20
void b_sort(void *bs, size_t num, size_t size,
int (*compar)(const void *, const void *))
{
int sorted = 0;
char *base = (char*)bs; // void * 算术运算g++会发出警告,为了消除警告,强制转换成char*
void *ptmp = malloc(size);
for( ; !sorted; num--) {
sorted = 1; // 每一趟都假设排序好了
for(size_t i=1; i<num; i++)
if(compar(base + i*size, base + (i-1)*size) < 0) {
sorted = 0;
memcpy(ptmp, base + i*size, size);
memcpy(base + i*size, base + (i-1)*size, size);
memcpy(base + (i-1)*size, ptmp, size);
}
}
free(ptmp);
}
int compar(const void *a, const void *b)
{
return *(int*)a - *(int*)b;
}
// 主函数
int main()
{
int max = 100, min = 1;
int v[LEN];
srand(time(NULL));
for(int i=0; i<LEN; i++) {
v[i] = rand() % max + min;
printf("%d %s", v[i], i==LEN-1 ? "\n" : "");
}
b_sort(v, LEN, sizeof(int), compar);
for(int i=0; i<LEN; i++)
printf("%d %s", v[i], i==LEN-1 ? "\n" : "");
return 0;
}
c函数模板实现的更多相关文章
- c++函数模板作为类的成员函数,编译报错LNK2019的解决方法
为了使某个类的成员函数能对不同的参数进行相同的处理,需要用到函数模板,即template<typename T> void Function(). 编译时报错LNK2019 解决方法: 1 ...
- C++STL - 函数模板
模板主要是为了泛型编程,做到与类型无关 模板有函数模板和类模板,本文主要整理的是函数模板 1.函数模板定义 template<typename 类型形参1,typename 类型形参2,...& ...
- 使用getopt_long来解析参数的小函数模板
getopt_long原型 #define no_argument 0 #define required_argument 1 #define optional_argument 2 struct o ...
- C++函数重载和函数模板
1.函数重载 这是小菜鸟写的一个例子. 函数重载应该注意以下几点: 1.1重载函数有类似的功能: 1.2只能以参数的类型(形参个数和类型)来重载函数, int max(int a,int b);flo ...
- 零值初始化&字符串常数作为函数模板参数
1.在定义一个局部变量时,并希望该局部变量的初始化一个值,可以显示调用其默认构造函数,使其值为0(bool类型默认值为false). template <typename T> void ...
- 让gcc支持成员函数模板的trick
让gcc支持成员函数模板的trick 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议 gcc 4.7.3 不支持成员 ...
- 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板
[源码下载] 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板 作者:webabcd 介绍不可或缺 Windows Native 之 C++ ...
- Effective C++ -----条款45:运用成员函数模板接受所有兼容类型
请使用member function templates(成员函数模板)生成”可接受所有兼容类型“的函数. 如果你声明member templates 用于“泛化copy构造”或“泛化assignme ...
- c++ 左值右值 函数模板
1.先看一段代码,这就是一种函数模板的用法,但是红色的部分如果把a写成a++或者写成一个常量比如1,都是编译不过的,因为如果是a++的话,实际上首先是取得a的 值0,而0作为一个常量没有地址.写成1也 ...
- 读书笔记_Effective_C++_条款四十五:运用成员函数模板接受所有兼容类型
比如有一个Base类和一个Derived类,像下面这样: class BaseClass {…}; class DerivedClass : public BaseClass {…}; 因为是父类与子 ...
随机推荐
- excel中在某一列上的所有单元格的前后增加
excel中在某一列上的所有单元格的前后增加数字汉字字符等东西的函数这样写 “东西”&哪一列&“东西” 例如 “1111”&E1&“3333”
- Markdown 小记
在学习Markdown之前,对稍有轻微强迫症的我来说,写博客和做笔记是一件很痛苦的事.废话不多说直接来看,偷偷吐槽:不知道咋在博客园配置Markdown,以后如果学会了回来补充. 标题 #hello一 ...
- DELPHI解析JSON格式化的日期
DELPHI解析JSON格式化的日期 json返回的日期是 /Date(1560355200000)/ 这样的格式. 这个1560355200000,是指1970年以后的秒数. DELPHI如何解析这 ...
- Django 测试开发4 Django 模板和分页器
Django结合前端框架Bootstrap来开发web页面.pip install django-bootstrap3 在setting.py添加‘bootstrap3’. 继承模板. 在base页面 ...
- xgboost 源码学习
官方代码结构解析,README.MD XGboost 回归时,损失函数式平方误差损失 分类时,是对数自燃损失: Coding Guide ====== This file is intended to ...
- SpringBoot缓存技术
一.SpringBoot整合Ehhcache 添加maven依赖 <dependency> <groupId>org.springframework.boot</grou ...
- 分享一款颜色神器ColorSchemer Studio
ColorSchemer Studio是一款专业配色软件,网页设计或平面设计师必备工具,和ColorPix V1.2 屏幕取色同属一个公司佳作,使用ColorSchemer Studio吸取屏幕任一色 ...
- cin中的注意事项
猎豹网校C++ Primer学习笔记 - ostartech - 博客园 https://www.cnblogs.com/wxl845235800/p/11396323.html 在VS中使用cin& ...
- 26 Flutter仿京东商城项目 购物车之 event_bus事件广播 事件监听
event_bus 介绍 在前面的课程我们给大家讲过状态管理 Provider 的使用. 通俗的讲状态管理就是:当我们想在多个页面(组件/Widget)之间共享状态(数据),或 者一个页面(组件/Wi ...
- CentOS7下JSP连接Mysql
实验环境如下: youxi1 CentOS7.5 Tomcat8.5.35 192.168.5.101 youxi2 CentOS7.5 Mysql5.7.20 192.168.5.102 (1).下 ...