1.自己写一个库:和建工程是一样的,但是建的项目是DLL文件,然后再其工程下添加源文件和头文件,源文件正常写,头文件是有要求的,__declspec(dllexport)的加入,程序在下面是给出的,所以往下读,你会有所得的!!最终得到DLL,LIB,以及.h文件(.h文件只是一个路径,在用的时候)
2.源文件----库文件(.h文件,lib文件,dll文件)
H文件和lib和opencv中的添加过程一样的,dll是要添加到debug文件夹中的,和.exe文件要放在一起的,在opencv中dll是放在环境变量中的,H是包含头文件中,lib是库目录中,lib中的lib是添加依赖项的,如果库不是很大的话,可以添加到项目路径下,直接在项目中#include”头文件”,#pragma comment(lib,”lib所在的路径下”),这样就可以用库了,接着把dll复制到debug中去,整个工程就可以用库了,lib和头文件是编译的时候用,dll是程序运行的时候用,所以要和.exe放在一起使用的。
本人在vs2017中把之前写的排序库进行了一次跨平台编译,然后这个工程我们就来建一个(工程的库,供本人以后的开发使用的) Sortlib是已经编译好了的工程文件,接着把这个文件来生成dll lib .h 文件,

库里导出头文件:__declspec(dllexport) 放在头文件中的,不用就不用导出来的
生成成功之后dll和lib文件在debug文件中
然后就是在其他的工程中去使用他:和(2)中的操作是一致的
对于我这种比较差的人配置这个还真是挺难的,从写源代码,到生成自己的库,然后测试自己的库,真的挺多问题。
分成三部分完成的
(1)源文件的编写
(2)dll库文件的编写(用里面产生的dll,lib,头文件(导出的那部分)),
(3)测试,简单的方法就是把库文件放在自己建的项目里面,然后调用头文件,调用库文件,最后运行时把dll放到.exe可执行文件中去(放在一起的)
(4)对于非常大的库,我们就和配置opencv那样的进行配置(opencv是大库所以它的配置是可以直接在网上看到的)

(1).cpp文件的编写(是我自己总结的几种排序的写法)(也叫自己的排序库)

#include "sortLib.h"
#include <cstdio>
#include <cstdlib>
void show(int array[], int len)
{int i = 0;for (i = 0; i < len; i++){printf("%d\t", array[i]);}printf("\n");
}
void swap(int array[], int i, int j)
{int temp = array[i];array[i] = array[j];array[j] = temp;
}
/*选择排序,选择关键字小的元素来进行交换*/
void chooseSort(int array[], int len)
{int i = 0, j = 0, k = 0;for (i = 0; i < len; i++){k = i;for (j = i; j < len; j++){if (array[k] > array[j]){k = j;  //对于关键字的排序 }}swap(array, i, k);  //每次交换都不需要进行交换的,每一扫描找出最小元素的下标的 }//show(array,len);
}
/*选择排序是一种稳定的排序算法*/
/*插入排序的办法,这种排序还是很厉害的是基于插入位置的一种插入算法*/
void insertSort(int array[], int len)
{int temp = 0, i = 0, j = 0, k = 0;for (i = 1; i < len; i++){k = i;temp = array[i];for (j = i - 1; (j >= 0) && (array[j] > temp); j--){array[j + 1] = array[j];k = j;   //找位置的程序 }array[k] = temp;    //把元素插入到找到的位置中间 }//   show(array,len);
}
/*插入排序是一种稳定的排序算法,2,2还是之前的2,2,对于数据元素是公平的*/
/*冒泡排序的用法,冒泡排序是一种在比较中进行交换的过程,第一趟进行n-1次排序。。。*/
void bubbleSort(int array[], int len)
{int i = 0, j = 0;for (i = 0; i < len; i++){for (j = len - 1; j > i; j--){if (array[j] < array[j - 1]){swap(array, j, j - 1);}}}
}
/*冒泡排序也是一种稳定的排序算法,对于排序是相对公平的*/
/*以上是简版的冒泡排序算法,对于简版的排序算法可以进行优化处理的*/
//加一个程序控制变量
void bubbleOptimizeSort(int array[], int len)
{int i = 0, j = 0;int control = 1;for (i = 0; i < len && control; i++){control = 0;for (j = len - 1; j > i; j--)    //切记不能等于的 {if (array[j] < array[j - 1]){swap(array, j, j - 1);control = 1;}}}
}
/*优化参数的说明,优化参数是针对程序的运行来说的,如果一趟下来程序中并没有发生交换就说明,这个数组或者其他是排好顺序的,优化参数在此时就决定不再进行程序的执行*/
/*快速排序的程序分解,快速排序是不稳定的对于快速算法就是对序列进行划分的过程的*/
/*进行一次划分*/
int onceQuickSort(int array[], int low, int high)
{int temp = array[low];//把第一个元素取出来作为基准元素的while (low < high){while ((low < high) && (array[high] >= temp)){high--;}swap(array, low, high);while ((low < high) && (array[low] <= temp)){low++;}swap(array, low, high);}//进行完这次的划分之后会把基准元素划分好啦   array[low] = temp;return low;
}
/*在这里就完成了数据的第一次简单的划分*/
/*这里是对子序列进行递归的操作的*/
void Qsort(int array[], int low, int high)
{if (low < high){int pv = onceQuickSort(array, low, high);Qsort(array, low, pv - 1);Qsort(array, pv + 1, high);}//这里的操作都是在一个完整的空间里面操作的在一个完整的空间里面实现递归的操作过程
}
void QuickSort(int array[], int len)
{Qsort(array, 0, len - 1);
}/*快速排序是一种不稳定的排序算法,在这里快速排序基于的原理就是不断的划分区间的*/
/*归并排序的用法,基于的思想也是分组的思想,在两个已经排好序的基础上进行排序*/
//两组序列归并成一组的子程序
void Merge(int array[], int des[], int low, int med, int high)
{int i = low;   //左边序列的开始下标 int j = med + 1;//右边序列的开始下标 int k = low;//空数组的下标 while (i <= med && j <= high){if (array[i] <= array[j]){des[k] = array[i];k++;i++;}else {des[k] = array[j];k++;j++;}}while (i <= med){des[k++] = array[i++];  //左边的序列长 }while (j <= high){des[k++] = array[j++];  //两个序列的长度不等,右边的序列长 }//把两个排好的子序列排成一个完整的序列
}
void MergeSort(int array[], int des[], int low, int high, int max)
{if (low == high){des[low] = array[high];}else {int med = (low + high) / 2;int* space = (int*)malloc(sizeof(int)*max);if (space != NULL){MergeSort(array, space, low, med, max);MergeSort(array, space, med + 1, high, max);Merge(space, des, low, med, high);}}
}
void MergeSortDisplay(int array[], int len)
{MergeSort(array, array, 0, len - 1, len);
}
/*归并排序是一种不稳定的排序算法,其排序思想是在递归的思想上进行的,对于两组有序的序列,进行排序笔记本上有归并排序的模型的*/
/*排序中的大神--希尔排序算法简单版本,基于插入排序的思想*/
void  shellSort(int array[], int len)
{int i = 0, j = 0, gap = len;do {gap = gap / 3 + 1;//gap必须要收敛于1的for (i = gap; i < len; i += gap){int k = i;int temp = array[k];for (j = i - gap; (j >= 0) && array[j] > temp; j -= gap){array[j + gap] = array[j];k = j;}array[k] = temp;}} while (gap > 1);
}
/*希尔排序是一种不稳定的排序算法,基于最简单的插入排序算法*/
/*希尔排序高级实现形式 对每一组进行希尔排序的利用的,gap在变分的组数就是在变的*/
void  ShellSort(int array[], int len)
{int i, j, k, temp, m, l;int gap = len;for (gap = len / 2; gap > 0; gap = gap / 2)  //对gap进行收敛递减的过程 如果最终能收敛到1也就是整个排序就是完美的 {for (i = 0; i < gap; i++)        //对于每一个gap分成gap组来进行插入排序 {for (j = i + gap; j < len; j += gap)  //每一组内进行排序的 {if (array[j] < array[j - gap]){temp = array[j];k = j - gap;while (k >= 0 && array[k] > temp) {array[k + gap] = array[k];k = k - gap;}array[k + gap] = temp;}}}}
}
/*希尔排序的原理是基于分组排序的原理进行的成功应用*/
/*希尔排序的自己实现方法*/
void ShellSort1(int array[], int len)
{int i, j, temp, gap, m, l;for (gap = len / 2; gap > 0; gap = gap / 2) //最终一定要收敛到1的 ,不然算法退步出来的 {for (i = 0; i < gap; i++)        //对于每一个gap都会把数据分成gap组来进行处理的 {for (j = i + gap; j < len; j += gap)  //对于每一组内进行的排序 {int  l = j;temp = array[l];       //这一步是非常关键的,不然在之后的数据复制会出错的,以后在多变量的程序中要注意的问题就是每一个变量的初值问题 for (m = j - gap; (m >= 0) && (array[m] > temp); m -= gap){array[m + gap] = array[m];l = m; ;}array[l] = temp;}}}
}

/变量的初值问题 ,对于每一个变量不要突然的出现在某个位置上,一定要进行赋初值处理的/

以上就是整个源文件的
2.下面是头文件.h:最关键了

__declspec(dllexport) void show(int array[], int len);
__declspec(dllexport) void swap(int array[], int i, int j);
__declspec(dllexport) void chooseSort(int array[], int len);
__declspec(dllexport) void insertSort(int array[], int len);
__declspec(dllexport) void bubbleSort(int array[], int len);
__declspec(dllexport) void bubbleOptimizeSort(int array[], int len);
__declspec(dllexport) int onceQuickSort(int array[], int low, int high);
__declspec(dllexport) void Qsort(int array[], int low, int high);
__declspec(dllexport) void QuickSort(int array[], int len);
__declspec(dllexport) void Merge(int array[], int des[], int low, int med, int high);
__declspec(dllexport) void MergeSort(int array[], int des[], int low, int high, int max);
__declspec(dllexport) void MergeSortDisplay(int array[], int len);
__declspec(dllexport) void  shellSort(int array[], int len);
__declspec(dllexport) void  ShellSort(int array[], int len);
__declspec(dllexport) void ShellSort1(int array[], int len);
//导出头文件的方法:__declspec(dllexport)添加到头文件之前的 在项目下重新生成在debug文件夹下就去看看dll,和lib文件

3.把上面的源文件和头文件放到自己的工程中去,编译就可以产生 LIB AND DLL

4.测试自己的写的库文件,也就是相当于你调用别人的库是一样的,是不是感觉自己特别的牛逼!!哈哈测试代码如下:

#include "include\sortLib.h"
#pragma comment(lib,"include\\sortDll.lib")
int main(int argc, char *argv[])
{int array[] = { 12,12,8,4,9,5,62,33 };int len = sizeof(array) / sizeof(*array);show(array, len);ShellSort1(array, len);show(array, len);
}

这里调用的是自己库中的希尔排序,自己测试下吧!!在写代码的过程中要沉住气!!

C++函数库的理解:写一个C++程序库(排序库)然后调用自己写的库(附带程序)相关推荐

  1. [css] 让你手写一个reset的文件,你应该怎么写?要考虑哪些方面呢?

    [css] 让你手写一个reset的文件,你应该怎么写?要考虑哪些方面呢? 肯定首先考虑的是浏览器本身的样式,还有浏览器兼容.margin,padding ==>0ul,ol list styl ...

  2. 给网游写一个挂吧(四) – 调用游戏函数

    前面的文章给网游写一个挂吧 – 启动外挂上或给网游写一个挂吧 – 启动外挂下将外挂启动后,那就可以进行读写游戏内存和调用游戏的一些操作了. 读写内存很简单,如果是内挂的话,因为是运行在进程内,甚至都可 ...

  3. 如何写一个游戏AI(三)0-9手写数字图片识别AI训练

    接上回书,那么如何写一个入门的简单AI训练(0-9)数字图片试别AI.本文的程序,配合我训练的模型试别准确率只有98.8%,不过也是算是给我开辟了新的知识面. 1.为什么使用卷积神经网络 原因有二:1 ...

  4. 写一个饿汉单例模式的例子_你写的单例模式,能防止反序列化和反射吗?

    推荐学习 "23种设计模式知识要点"都没读通过,还有脸说摸不清搞不懂? 玩转JAVA筑基之Netty.并发编程与设计模式,打好基础备战春招 前言 说起单例模式,相信大家都不会陌生. ...

  5. php如何写一个能让外部访问的接口,如何写一个接口供外界访问

    在工作的时候经常调用别人的接口,获取数据,然后就想知道这中间的原理是什么呢?今天上一个自己写的一个测试例子: 首先是自己远程写好的一个接口:public function testming(){ $a ...

  6. 手写一个栈 java,数据结构|用java自己手写实现一个栈

    javaDEMO 本网站记录了最全的各种JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring的, Mybatis的等等各种,助力你从菜鸟到大牛,记得收藏哦~~ https ...

  7. python 生成excel像素画_用python写一个excel画像素图脚本时所用到的一些库

    首先 ,想法源于在果壳网看到的一个用excel画一幅像素图的活动 思路很简单: 先将一张像素图的每个像素点的rgb值取出来 然后用脚本操作excel,将rgb设置为单元格的背景色 主要就在于两点 一. ...

  8. 写一个点击图片进入浏览图片界面的第三方库思路

    1.点击缩略图的时候获取点击的imageView,以及所有图片的数组,然后作为参数传递给HYImageBrowserView 2.点击的时候进行截屏,并在keyWindow或self.navigati ...

  9. 写一个随机森林插补和填充风力发电功率数据的程序

    好的,以下是一个简单的用随机森林进行插补和填充风力发电功率数据的程序: # 导入需要的库 import numpy as np import pandas as pd from sklearn.ens ...

最新文章

  1. 一些linux下的性能监测工具
  2. 报错解决transmission: Error: Input/Output error和ls: reading directory '': Input/output error
  3. 怎么通过ip连接oracle,Oracle 无法通过IP连接问题
  4. MySQL约束课堂笔记
  5. python3 selenium安装教程_Python3爬虫利器之Selenium的安装
  6. FreeSql (二十)多表查询 WhereCascade
  7. Python数据分析扩展库pandas的DataFrame排序方法小结
  8. 达拉草201771010105《面向对象程序设计(java)》第十七周学习总结
  9. Android的DatePicker和TimePicker-android学习之旅(三十八)
  10. 新手搭建网站服务器(Ubuntu+LAMP)
  11. android room_Android Room –待办事项清单应用程序
  12. python递增文件名_python-文件存在时文件名中的数字递增
  13. linux文件系统F2FS,文件系统F2FS也将造福SSD
  14. c语言 delphi,delphi和c语言的比较 极其粗浅 菜鸟共勉
  15. python图片标记_python提取那些被“标记”照片的实例详解
  16. php 获取当前 周,php如何获取当前时间是第几周
  17. Python课第3周:平方根格式化
  18. 视频教程-移动端Web开发-JavaScript
  19. noip2014 珠心算测验 (枚举)
  20. 为什么要阅读计算机经典著作

热门文章

  1. c++ encode 函数_C++常用函数
  2. PMP证书的有效期是多久,怎么查验PMP证书有效性?
  3. BJ 集训测试3 problemA信仰圣光
  4. capwap学习笔记——初识capwap(四)
  5. 面向对象七大设计原则之依赖倒置原则
  6. 国内有哪些量化交易平台?
  7. 10分钟实现个人博客布置说说留言功能,Artitalk.js插件使用
  8. Tensorflow之CNN实现CIFAR-10图像的分类python
  9. 惠普瘦客户机支持多屏幕显示 惠普t610瘦客户机评测
  10. Android Studio 3,移动开发入门书籍