![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++功能函数
一些常用但难归类的功能模块
Mango酱
这个作者很懒,什么都没留下…
展开
-
32功能之explicit的作用
一 explicit 的作用explicit的作用其实很容易理解,就是不能隐式调用构造函数,只能显示构造,具体看下面例如即可。class Test1 {public: Test1(int a) { _a = a; }private: int _a;};class Test2 {public: explicit Test2(int a) { _a = a; }private: int _a;};void test00() { Test1 t1 = 2; // 可以原创 2021-08-29 23:26:34 · 102 阅读 · 0 评论 -
31功能之取整、取余的用法(一般取整可据条件求对应的次数,取余用于要求某个值必须是某个整数倍或者指定随机值的范围)
很多时候,我们需要对某些值进行取整或者取余。如果不使用的话,代码可能写得特别的长。下面举例如何使用取整进行简化代码。一 取整的用法取整一般是求某些次数或者对应范围的值的。例如取整例子:玩家在某个时间段内,增加指定的领取金币次数。具体是:1)登录时间在2小时以上,4小时以下的增加1次;2)登录时间在4小时以上,6小时以下的增加2次;3)登录时间在6小时以上,8小时以下的增加3次;4)登录时间在8小时以上,10小时以下的增加4次;5)登录时间在10小时以上,增加5次;以lua代码为例,首原创 2021-08-25 14:20:55 · 721 阅读 · 0 评论 -
30功能之Base64编码原理
一 Base64的由来目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,Base64到底起到什么作用呢?在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数原创 2021-07-29 23:47:38 · 226 阅读 · 1 评论 -
29功能之VS下测试两个动态库头文件内声明同一宏是否会重定义
29功能之VS下测试两个动态库头文件内声明同一宏是否会重定义1 在动态库的头文件测试1)首先在一个动态库的头文件中添加一个宏定义。然后生成动态库的lib和dll。2)同样在另一个动态库2的头文件添加同一个宏,并生成。3)将两个动态库的头文件和lib,dll按照创建动态库时的做法包含到当前项目中,防止编译出现错误。点击生成如下:从结果中可以看到,两个动态库的头文件中定义同一个宏是不会造成宏重定义的。你可以按照命名空间去了解,即它们是两个不同命名空间的变量名一样的东西。2 在动态库的cp原创 2020-08-23 10:16:48 · 841 阅读 · 0 评论 -
28功能之VS如何调用别人发布的动态库(实际与上一篇类似)
28功能之VS如何调用别人发布的动态库(实际与上一篇类似)1 与上一篇的区别做法是差不多,这里强调我在做过程中遇到的问题,就是上一篇我们在调用实现文件时,只要包含对应库目录与添加库文件就OK了,不需要对MyDLL2.dll进行操作任何文件路径。 但是,在这里我模拟别人封装发布对应的include和lib库,结果发现,…dll文件和.lib放一起它报错了,说没有找到对应的.dll文件。解决:将放在lib里的.dll文件放在项目路径下就可以了,所以说,调用别人发布的库时还是要很熟悉这些问题,不然到时候你处原创 2020-08-22 21:05:19 · 384 阅读 · 1 评论 -
27功能之VS2017动态库的制作与使用
27功能之VS2017动态库的制作与使用赏你:这里提供动态库是否成功导出函数的工具官网,下载时注意,看你VS头顶上面有个Debug和X8?,你的是x86就下载x86,x84就下载x84。http://www.dependencywalker.com/前言:实际上动态库的生成和上一篇静态库是一模一样的。只不过上一篇是用VS2013讲。1点击Windows桌面向导,不建议直接生成DLL那个选项,文件多,并且容易出错。2选择动态链接库-空项目。3建立对应的.h和.cpp文件,按我如下的办法原创 2020-08-22 17:24:32 · 352 阅读 · 0 评论 -
26功能之VS2013静态库的制作与使用
26功能之VS2013静态库的制作与使用制作静态库1新建项目-选择Win32项目2先选择空项目-静态库。若先选择静态库,空项目按钮无法被选中,这点需要注意。3可以看到此时是没有其它.h和.cpp文件,有时VS13或者15即使你创建空项目,他也会自动帮你创建其它文件。。。这是bug,重新创建就好。4在.cpp文件先定义头文件名,然后实现你的函数功能。5在头文件中添加防止头文件重复的内容,然后声明你刚刚已经实现的函数。当然也可以写成#pragma once6 此时点击生成解决原创 2020-08-22 11:45:19 · 423 阅读 · 0 评论 -
24功能之各种排序的时间复杂度分析
24功能之各种排序时间复杂度分析1 稳定的排序1)冒泡2)插入3)归并2 不稳定的排序1)选择排序2)希尔排序3)快速排序参考快排分析4)堆排序参考添加链接描述3 最后给出各种排序O(N)的总结表与排序的使用场合1)冒泡,选择,插入,优先选择插入。因为冒泡和选择的O(N)为N^2,无法做到插入的最好情况,并且插入是稳定的排序。2)数据有序的情况下,使用插入与希尔排序是非常高效的;3)文件归并的时候,选择归并排序,当然使用堆排序也问题不大,因为有时很难去比较他们具体原创 2020-08-16 10:56:35 · 185 阅读 · 0 评论 -
23功能之海量文件(内存不足100M)的排序
23功能之海量文件(内存不足100M)的排序参考自:如何处理大数据量的磁盘文件-程序用编程艺术1 思想这里使用了多路归并,因为二路归并时,由于最后的两个文件变得越来越大,导致内存还是不满足。但多路归并时会因文件IO而变得慢。步骤:1)大文件分批读到内存排序后输出到多个小文件中;2)同时打开所有小文件,预先读每个文件的第一个值进内存(数组),使用败者树排序,不断输出调整;3)但是这里有一个问题,就是使用败者树剩下最后的K-1个数,由于所有文件读完了,没有新的数进树,所以那K-1个树不会排序,这原创 2020-08-14 21:16:38 · 1141 阅读 · 0 评论 -
22功能之败者树的解析与代码实现
22功能之败者树的解析与代码实现1 败者树的构建过程2 解析上图败者树由内部节点与叶子节点组成。1)内部节点指除了叶子节点与ls[0];2)叶子节点就是数据节点;若有K个数据,则叶子节点为K,内部节点为K-1。但是在代码实现过程中,需要有一个最小值与存放最小值下标的地方,而最小值放在叶子节点;最小值下标存放在ls[0]。故长度定义数据节点的数组为K+1;内部节点的长度为K。Q1:上面为何数据节点要使用最小值INT_MIN?因为方便在第一次调整的时候建立好败者树。Q2:为何loserTre原创 2020-08-14 21:03:31 · 1409 阅读 · 0 评论 -
21功能之5G文件数据(内存只有50M)中查找某个数据
21功能之5G文件数据(内存只有50M)中查找某个数据1 步骤1)分割文件即可。此时我有日志文件5G,为了保持文件数据完整性,我们使用行分割。我是先生成1G的文件,然后循环5次得出的5G文件,你们也可以用4k直接生成5G的文件,但是CPU慢的就会很卡,我的垃圾电脑就是。。。。。。下面给出生成5G的文件,不过你先要用4k的小文件生成1G的先,代码一样,将次数改一下即可。#!/bin/bashBASE_LOG_PATH=~/MyLinux/BigFileSplit/message.log ##1G文件原创 2020-08-11 12:22:30 · 489 阅读 · 0 评论 -
20功能之宏定义的相关知识与练习
20功能之宏定义的相关知识与练习1 练习1)定义一个宏函数,返回小的数#define MIN(A,B) ((A)>(B)?(B):(A))2)定义一个宏,表示每年有多少秒#define SECONDS_PER_YEAR (246060*365)UL其中UL代表无符号长整型。...原创 2020-08-11 11:56:59 · 154 阅读 · 0 评论 -
19功能之C++中调用C的函数要添加extern声明
19功能之C++中调用C的函数要添加extern声明因为C++支持重载,如果不添加extern声明的话,那么C++编译后的名字是与C的不一样,当执行时,去C库中找,会找不到该函数名。原创 2020-08-11 11:56:32 · 294 阅读 · 0 评论 -
18功能之讲述static在C语言的作用
18功能之讲述static在C语言的作用1 static在C语言中的作用1)为局部变量时,作用域在本函数,生存期为整个模块;2)为全局变量时,作用域(具体需看定义位置)和生存期都是整个模块,其它模块无效;3)为静态函数时,作用域(具体需看定义位置)和生存期都是整个模块,其它模块无效。...原创 2020-08-11 11:56:02 · 158 阅读 · 0 评论 -
17功能之使用STL容器实现洗牌算法(全局与局部,加上斗地主练习)
17功能之使用STL容器实现洗牌算法(全局与局部)1 洗牌算法1)全局。每次的概率都保持一样。例如54张牌,需要放54次。每次都是1/54的概率随机抽取一张,放在0-53的下标中去。2)局部。每次随机抽取一张牌后放在第一个位置,放好的不再处理,然后再从剩下的牌随机抽取放在第一位(相对),共n-1次放完。2 代码实现1)全局//全局(重复、等概率)洗牌//cardNum代表产生的牌数vector<int> Make_Random_Cards1(int cardNum) { sr原创 2020-08-10 17:00:23 · 230 阅读 · 0 评论 -
16功能之sizeof的使用
16功能之sizeof的使用1 参数不同代表的意义1)sizeof参数为数组: 长度类型 。注:当数组是字符串类型,strlen出的长度需要+1。2)sizeof参数为值: 该值的类型。3)sizeof参数为地址: 为该指针类型。4)sizeof参数为数组作形参时的大小: 为对应类型指针的大小,void时需注意电脑位数。2 代码测试#pragma warning(disable:4996)#include<iostream>using namespace std;//数组原创 2020-08-10 16:51:53 · 508 阅读 · 0 评论 -
15功能之递归和非递归求和
15功能之递归和非递归求和1 递归求和//递归求和int Sum_Recursion(int n, int m) { if (n >= m + 1) { return 0; } return Sum_Recursion(n + 1, m) + n; //每次对n进行累加}2 非递归求和//非递归求和int Sum_NotRec(int n, int m) { int sum = 0; for (int i = n; i <= m; i++) { sum +=原创 2020-08-10 16:47:09 · 321 阅读 · 0 评论 -
14功能之C++Const的各种作用(主要分析难点)
14功能之C++Const的各种作用1 概述首先,这篇对于简单的const应用不多讲,就讲返回值为const、返回值为const+引用和函数后加const。2 重点在const+引用的组合,我们只需要记住它是产生中间值来确保是常引用。完整的看下面代码即可。3 代码分析#pragma warning(disable:4996)#include<iostream>using namespace std;//修饰函数时class Person {public: void原创 2020-08-10 16:45:14 · 145 阅读 · 0 评论 -
13功能之C++类默认生成的六个成员函数的自定义
13功能之C++类默认生成的六个成员函数的自定义1 代码理解即可#pragma warning(disable:4996)#include<iostream>using namespace std;//默认产生6个成员函数,不想使用就自己重写它们class Person {public: //1 默认构造 构造函数不能用const修饰,否则this无法修改指针;也不能用static修饰,因为静态函数没有this指针。 Person() //const error {原创 2020-08-10 16:37:26 · 118 阅读 · 0 评论 -
12功能之随机抽取商品的id
12功能之随机抽取商品的id1 理论思想与步骤1)利用权重分配对应概率,不断对所有商品的权重进行累加,当随机产生的权重值小于该累加值时,就相当于在该商品的概率之中。2)步骤:1总2随3遍4循环。1代表求总权重;2代表取随机数;3代表遍历商品的权重;4代表循环抽取商品id的次数。2 代码实现1)返回可以重复的id//返回可以重复的idvector<int> Random_Gain_Id1(vector<GoodLists> gList){ //用于存放随机抽取的商品i原创 2020-08-10 16:34:57 · 333 阅读 · 0 评论 -
11功能之二分法的实现
11功能之二分法的实现前提:该二分法需要在有序数组的基础上。1 理论思想维持mid下标,等于就返回;小于end=mid-1;大于start=mid+1。2 代码//在有序数组中通过二分法查找int Second_Find(int arr[],int len,int n) { int start = 0; int end = len - 1; int mid; bool flag = false; while (start <= end) { mid = (start原创 2020-08-10 16:19:41 · 105 阅读 · 0 评论 -
10功能之数组元素的打乱(洗牌算法)
10功能之数组元素的打乱(洗牌算法)1 理论思想每轮随机选一个数放在第一位,确定的数不再处理,共处理n-1次。2 代码void Swap(int &a, int &b) { int tmp = a; a = b; b = tmp;}void Random_Elem(int *arr, int len) { srand(time(NULL)); for (int i = 0; i < len - 1; i++) { //共随机放n-1次原创 2020-08-10 16:16:01 · 164 阅读 · 0 评论 -
09功能之十进制与十六进制、八进制、二进制的相互转换的实现
09功能之十进制与十六进制、八进制、二进制的相互转换的实现前提:其它相关函数。1)字符串翻转函数//字符串翻转函数void ReverseStr(char *source, char target[], unsigned int len){ unsigned int i; for (i = 0; i < len; i++) { target[i] = source[len - 1 - i]; } target[i] = 0;}2)自定义MyPow求次方函数int原创 2020-08-10 12:48:54 · 205 阅读 · 0 评论 -
08功能之十进制与十六进制、八进制、二进制的相互转换的理论
08功能之十进制与十六进制、八进制、二进制的相互转换的理论1 十进制整数转其它进制方法:持续除k取余法。即十进制要转几进制,就对k不断进行除法即可。余数倒序取出就是答案。1) 十进制整数转十六进制2) 十进制整数转八进制3) 十进制整数转二进制2 其它进制转十进制方法:同样很简单,前面是不断取余,这里不断相乘即可。但是需要注意底数与其前面的系数,底数等于该进制数,系数对应该进制的每一位。1)十六进制转十进制2)八进制转十进制3)二进制转十进制3...原创 2020-08-10 12:35:33 · 620 阅读 · 0 评论 -
07功能之装备系统的实现
07功能之装备系统的实现前提:我们知道,C++功能系统的实现思想是:继承和组合,优先使用组合。原因是组合可以更多的节省代码,而继承代码多,并且继承下来成员很混乱。 但是作者这里就使用了继承,哈哈,组合的话大家自己去试着实现。1 整个装备系统的框架逻辑1)英雄与装备的关系:装备继承后仍是英雄。2)对业务层的代码分析可得出,每一个装备对象都是由上一个对象(装备类或者英雄类)的数据赋值得到,然后上一对象被释放,剩下的对象成为新英雄对象。2 思考如何实现抽象类,即上面的英雄基类和装备基类1)继承时原创 2020-08-07 18:50:36 · 346 阅读 · 0 评论 -
06功能之读取文件统计数字的次数(hash_map存储)
06功能之读取文件统计数字的次数(hash_map存储)1 思路分析:1)每次将读取到的数字存在字符数组;2)从字符数组截取实际长度保存成string对象;3)建立hans_map<string,int>,string为数字,int为次数,每次进行hMap[string] = hMap[string] + 1;即可。2 代码实现:#pragma warning(disable:4996)#include<iostream>#include<fstream>原创 2020-08-04 16:50:57 · 128 阅读 · 0 评论 -
05功能之实现两个文件根据主键进行删除存进新文件(vector,hash_map存储)
05功能之实现两个文件根据主键进行删除存进新文件(vector,hash_map存储key/value)前言:好了,我们前四个功能都是为了这个以及下一个练习实现的,现在我们来运用前四个的功能实现小练习。要求:delete文件中有的主键,若new也有,则将new的那行删除,最后将结果存放在新文件outFile。new.txt:0x214871,xxxx1 // 逗号前成为主键0x09313145,xxxx0x1234561,xxxx0x1234555,xxxx123delete:原创 2020-08-04 13:14:55 · 172 阅读 · 0 评论 -
04功能之利用string容器的find和substr函数实现分割字符串
04功能之利用string容器的find和substr函数实现分割字符串1 C++中string容器的find、substr函数:1)size_t xxx.find(string &str,size_t count=0) :从目标字符串中(即xxx调用者)查找str子串,找到返回首地址;没找到返回"string::npos"枚举。count代表从哪个下标开始找。2)string xxx.substr(pos1, pos2):截取目标字符串xxx,从下标pos1到pos2,返回该范围的字符串原创 2020-08-04 12:55:20 · 579 阅读 · 0 评论 -
03功能之将UTF8转成GB2312
03功能之将UTF8转成GB2312前言:我们为什么需要这个函数呢,因为我们从文本文件中读取时,编码是ASCII码或者GB2312可能不会出错,但是读取的是UTF8时,就很容易造成乱码,所以我们每次读取时都最好将读取到的内容转成GB2312。1 函数实现//UTF8转GBA312 ASCII、GB会正常显示,但是UTF8是可能会乱码,所以最好在读取时转string UTF8ToGB(const char* str){ string result; WCHAR *strSrc; LPSTR原创 2020-08-04 12:43:56 · 819 阅读 · 0 评论 -
02功能之读写文件流操作(C语言实现读取文件指定一行)
02功能之读写文件流操作(C语言实现读取文件指定一行)1 C语言读取文件指定一行// 读取文件指定一行int ReadLine1(const char *fileName, char outBuf[], int n){ int whichLine = n; //指定要读取哪一行 int currentIndex = 1; //当前读取的行 char buf[1024] = { 0 }; //临时 不能做返回值 防原创 2020-08-04 12:37:27 · 3537 阅读 · 0 评论 -
01功能之读写文件流操作(按行读取文件所有内容)
01功能之读写文件流操作前言:1)下面我们将讲如何将文件的内容使用C++方法读写文件。为了以后重用方便。2)文件最大一行字节是=1024。1 读取文件全部1,可读取空格和换行符,但换行符读进buf时被自动转成’\0’。string ReadFile1(string fileName) { /* open(): 参2代表打开方式:1)ios::in文件以输入打开;2)ios::out文件以输出到磁盘打开;还有其它方式等等。 参3代表操作权限:0-普通文件打开访问 1-只读 2-隐含文件原创 2020-08-04 12:32:50 · 1564 阅读 · 0 评论