c++
yisun03
这个作者很懒,什么都没留下…
展开
-
用mscomm控件编写串口通信出现error reading comm device错误-已解决
一、问题描述 用mscomm控件编写串口通信过程中,在消息响应函数OnComm函数下接受串口发送过来的数据时,在get_Input()函数会出现error reading comm devece 错误。具体代码如下:void XXXDlg::OnCommMscommLaser(){ memset(chstrLaser, 0, 1024); //chstrLaser为全局变量. short i = m_mscomLaser.get_InBufferCount(); //语...原创 2021-08-27 10:02:42 · 3233 阅读 · 2 评论 -
未在计算机上注册控件-已解决
我们在写MFC程序用到ActiveX控件时,有的时候上一秒都用得好好的,下一秒就提示未在计算机上注册该控件,叫先注册了才能用,通过vs等软件也注册不了,那只能手动下载相应控件并注册了。下面以注册串口通信控件MsComm控件为例: 有很多控件系统是没有自带的,比如MsComm(Microsoft Communications control)控件就需要在计算机上注册。 注册第一步,下载相应的控件,MsComm控件下载地址:https://www.ocxme.com/files/mscomm...原创 2021-08-23 08:51:00 · 2393 阅读 · 0 评论 -
linux命令:批量替换多个文件中的指定字符/字符串/子串
一条命令搞定sed -i "s/原字符串/目标字符串/g" `grep 原字符串 -rl 需要批量替换的文件或文件夹目录`如:在当前目录将原字符串"suffx"(也可以是子串)批量替换为字符串"_kind",如下一行命令即可实现批量替换sed -i "s/suffix/_kind/g" `grep suffx -rl ./`...原创 2021-01-14 15:49:53 · 3682 阅读 · 1 评论 -
结构体对齐(字节对齐)规则及大小计算
什么是字节对齐这跟读取数据有关,cpu读取一次能读取到的内存大小跟数据总线的位数有关,如果数据总线为16位,那么cpu一次能够读取2字节;如果为32位那么cpu一次可以读取4字节,而读取数据是需要消耗时间的,为了提高效率,尽量让同一个数据(变量)能使用最少次数将其读取出来,那么解决办法就是要求每个数据(变量)在其自然边界上,比如说一个int类型的变量占4字节,那么在存储这个int变量的时候编译器会将让这个变量的起始地址能够被4整除,那么这样就不会导致这个int类型的变量明明没有超过数据总线位数(假设位3原创 2020-07-15 20:30:01 · 4609 阅读 · 1 评论 -
动态规划思想实现最长回文子串(c++代码)
思想:假设dp[i,j]=1,表示str[i…j]是回文串,dp[i,j]=0表示str[i,j]不是回文串.if str[i] == str[j] then dp[i,j] = dp[i+1,j-1].if str[i] != str[j] then dp[i,j] = 0.代码:完整代码已上传我的github,项目名DP,其中还有最大公共子序列和最长公共子串的实现:https://github.com/yisun03/DPLPS.h//// Created by yis o.原创 2020-07-13 13:19:28 · 750 阅读 · 0 评论 -
动态规划思想计算最大公共子串(c++代码)
问题: 计算两个字符串的最大公共子串(longest common continue substring), 注意不是子序列是子串,子串是要求字符之间是相连的,而序列则只要求是保持前后顺序不变. 我们这里要求的是最长公共子串的长度.思想:设:C[i,j] = LCS(str1[1...i],str2[1...j]),即C[i,j]表示序列str1[1...i]和str2[1...j]的最长公共子序列的长度,则 C[m,n] = LCS(str1,str2)...原创 2020-07-12 21:16:55 · 911 阅读 · 0 评论 -
动态规划思想计算最大公共子序列(c++代码)
问题:计算两个字符串的最大公共子序列(longest common substring),注意是子序列不是子串,子串是要求字符之间是相连的,而序列则只要求是保持前后顺序不变.比如str1 = "abc"和str2 = "bac"的最长公共子序列为"bc"和“ac".我们这里要求的是最长公共子序列的长度.思想:计算两个数组的最长公共子序列.设:C[i,j] = LCS(str1[1...i],str2[1...j]),即C[i,j]表示序列str1[1...i]和str2[1...j]的原创 2020-07-12 20:29:25 · 403 阅读 · 0 评论 -
十大排序算法的c++实现看这篇就够了(可直接用在自己项目中)
我将十大排序算法做成一个类,代码中有丰富的注释,包括算法思想,明了易懂。您也可以直接拿来使用,不需要自己再花时间实现。您只需要将两个文件:sort.h和sort.cpp放到您的项目中并在你的代码中使用:yis::sort::sort_name;即可完成对应排序算法的排序。为了防止名字冲突我添加了"yis"命名空间(当然您可以对源码进行修改)。项目地址见我的github: https://github.com/yisun03/sort如果代码中哪里的注释或思想我有说错(当然代码都..原创 2020-07-03 22:11:07 · 286 阅读 · 0 评论 -
c++实现基数排序
代码说明代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。项目已经上传到我的github:https://github.com/yisun03/sort项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地原创 2020-07-03 21:18:35 · 3439 阅读 · 5 评论 -
c++实现桶排序
代码说明代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。项目已经上传到我的github:https://github.com/yisun03/sort项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地原创 2020-07-03 20:08:04 · 3581 阅读 · 1 评论 -
c++实现计数排序
代码说明代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。项目已经上传到我的github:https://github.com/yisun03/sort项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地原创 2020-07-02 22:31:58 · 1493 阅读 · 0 评论 -
c++实现堆排序
代码说明代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。项目已经上传到我的github:https://github.com/yisun03/sort项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地原创 2020-07-02 20:48:50 · 426 阅读 · 0 评论 -
c++实现非递归的快速排序
代码说明代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。项目已经上传到我的github:https://github.com/yisun03/sort递归实现见我的另一篇blog:https://blog.csdn.net/weixin_39408343/article/details/107086104项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b ..原创 2020-07-02 16:36:58 · 1669 阅读 · 0 评论 -
c++实现递归的快速排序
代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。项目已经上传到我的github:https://github.com/yisun03/sort项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地排序指在排序原创 2020-07-02 15:56:46 · 1508 阅读 · 0 评论 -
c++实现非递归的归并排序
代码说明代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。递归实现版本见我的另一篇blog:https://blog.csdn.net/weixin_39408343/article/details/107083607项目已经上传到我的github:https://github.com/yisun03/sort项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b原创 2020-07-02 15:09:00 · 1310 阅读 · 0 评论 -
c++实现递归的归并排序
代码说明代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。项目已经上传到我的github:https://github.com/yisun03/sort项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地原创 2020-07-02 14:29:55 · 810 阅读 · 0 评论 -
c++实现希尔排序
代码说明代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。项目已经上传到我的github:https://github.com/yisun03/sort项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地原创 2020-07-01 20:50:27 · 478 阅读 · 0 评论 -
c++实现冒泡排序
代码说明代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。项目已经上传到我的github:https://github.com/yisun03/sort项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地原创 2020-07-01 19:44:36 · 469 阅读 · 0 评论 -
c++实现插入排序
代码说明代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。项目已经上传到我的github:https://github.com/yisun03/sort项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地原创 2020-07-01 19:07:12 · 409 阅读 · 0 评论 -
c++实现选择排序
代码说明代码是我亲自码的,调试通过的,代码中有详细的注释,一目了然。术语说明1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地排序指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储空间进行比较和交换的数据排序。4、非原地排序:需要利用额外的数组来辅助排序。5、时间复杂度:一个原创 2020-07-01 14:33:08 · 606 阅读 · 0 评论 -
c++中截取想要的特定的字符子串
c++中想要对字符串string进行截取字符特定的字符字串,可以结合substr()和一系列的返回索引函数来做。1、substr()函数很好理解,他的原型为://原型1basic strin::substr(string,start,length);//原型2(将string移到外面)string &a,a.substr(start,length);函数功能时返回字符串a从start位置开始的长为length的子串,其中start参数必须提供,参数lmeiyouength为可选原创 2020-06-18 16:48:36 · 10859 阅读 · 0 评论 -
std::vector顺序容器的默认顺序问题
对于顺序容器vector,在一系列的插入元素之后,它里面的元素的顺序会不会被vector重新排列顺序,对于重复插入相同的元素时vector又是怎么处理的。我们用实验说话:上我的代码 std::vector<int> vec_it; std::vector<double> vec_db; for(int i = 3;i < 11; i++) { vec_it.push_back(i%9); // 3,4,5,6,7,8,0,1 vec_原创 2020-06-13 15:57:05 · 3369 阅读 · 0 评论 -
c++子类重写父类的虚函数对返回类型和参数列表的要求
对于c++中的继承,如果子类重写父类的virtual函数,那么子类重写的这个函数的返回类型和参数列表要满足什么要的要求呢?可不可以和父类的那个virtual函数的返回类型或者参数列表不一样呢?下面来实验一下:我设计了三个类:base derived returns他们分别是父类:base,子类:derived,以及用于测试的返回类:returns.他们的结构如下:base.h和base.cpp#include "returns.h"class base{public:原创 2020-06-13 15:21:28 · 5368 阅读 · 1 评论 -
c++实现将实数转化为分子分母都为整数的分数。
real_value* translation_util::real_to_fraction(float num) { //分子. long long nume = 0; //分母. long long denom = 1; bool flag = false; char ch; string str = std::to_string(num); //得到分子分母. for(int i = 0; i < (int)str.l.原创 2020-06-01 12:28:05 · 1234 阅读 · 0 评论 -
c++中子类调用父类方法的方法
在c++中子类调用父类方法的方法和java所用的方式不一样,java使用super指针就可以调用,c++中虽然也有this指针,但是不能用super去调用父类方法。c++用的方法为:fatherClass::fatherFunction().1、java中的方法public Expr visit(BinaryExpr e) { if (isTupleComparison(e)) { if (e.op == BinaryOp.EQUAL) { return equal;原创 2020-05-29 10:49:47 · 7419 阅读 · 0 评论 -
C++ static_cast、dynamic_cast、const_cast和reinterpret_cast(四种类型转换运算符)
为了使潜在风险更加细化,使问题追溯更加方便,使书写格式更加规范,C++ 对类型转换进行了分类,并新增了四个关键字来予以支持,它们分别是:使用格式统一为xxx_cast<new_type>(expr).new_type为目标类型,data为要转的表达式。注意:1、static_cast不能用于无关类型之间的转换,因为无关类型之间的转换是有风险的。比如:int转double可以,但是int* 转 double* 就不行,double转int虽然可以,因为double.原创 2020-05-25 10:42:07 · 272 阅读 · 0 评论 -
c++中的虚函数(virtual)
虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。派生类不能改变virtual现状,基类函数没有virtual的时候派生类不能声明成有,基类有virtual的时候派生类声明不声明都一样.#include<iostream>class base{public: virtual void print1(){std::cout << "基类" << std:.原创 2020-05-22 10:28:00 · 703 阅读 · 0 评论 -
c++中也有java中的匿名内部类
什么是内部类将类写在其他类的内部,可以写在其他类的成员位置或局部位置,这种写在其他类内部的类就称为内部类。其他类也称为外部类。什么时候使用内部类在描述事物时,若一个事物内部还包含其他可能包含的事物,比如在描述汽车时,汽车中还包含有发动机,这时发动机就可以使用内部类来描述。 class 汽车 { //外部类 class 发动机 { //内部类 } }内部类的分类内部类分为成员内部类与局部内部类。我们定义内部类时,就是一个正常定义类的过程...转载 2020-05-21 17:04:09 · 1693 阅读 · 2 评论 -
c++中explicit关键字的介绍
1、C++中的关键字explicit主要是用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。类构造函数默认情况下声明为隐式的即implicit,隐式转换即是可以由单个实参来调用的构造函数定义了一个从形参类型到该类类型的隐式转换。编译器在试图编译某一条语句时,如果某一函数的参数类型不匹配,编译器就会尝试进行隐式转换,如果隐式转换后能正确编译,编译器就会继续执行编译过程,否则报错。2、当类的声明和定义分别在两个文件中时,explicit只能写在在声明中,不原创 2020-05-18 18:38:48 · 343 阅读 · 1 评论 -
c++中std::move()的用法
std::move函数可以以非常简单的方式将左值引用转换为右值引用。通过std::move,可以避免不必要的拷贝操作。std::move是为性能而生。std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。如string类在赋值或者拷贝构造函数中会声明char数组来存放数据,然后把原string中的 char 数组被析构函数释放,如果a是一个临时变量,则上面的拷贝,析构就是多余的,完全可以把临时变量a中的数据直接 “转移” 到新的变量下面即转载 2020-05-18 18:14:33 · 1261 阅读 · 0 评论 -
c++中如何动态生成变量名
这个问题也困扰了我好久,要是真的去动态的生成x0,x1,x2........是真的不可能。但是会有办法做到相似效果。比如想要做到如下:for(int i = 0; i < _vector.size(); i++) //_vector是一个vector对象{ auto v = _vector.at(i); auto xi = get_name(v); //想要在这个循环中生成x0,x1,x2,x3........}一个最直观最简单的办法就是利用数组。int x[_v原创 2020-05-16 17:46:06 · 7764 阅读 · 3 评论 -
c++中子类和父类的强制转换
只有子类转换成父类,父类不能转换成子类。因为子类是从父类继承而来,子类中包含父类中所有成员。而如果父类可以转换成子类,意味着将子类中将有一部分是未知的成员。这是不被允许的。要是确定父类转换成子类你能保证是正确的,可以用强制转换:子类强制转换为父类用static_cast<>:(a : public A)A * book;a* name;book = static_cast<A*>(name);父类转换为子类用dynamic_cast<>:原创 2020-05-12 09:05:03 · 8851 阅读 · 0 评论 -
ubuntu安装flex和bison(附有flex-2.6.4.tar.gz)
bison可以直接用命令装:sudo apt-get install bisonflex建议用源码装:下载flex-2.6.4.tar.gz后解压:sudo tar -zxvf flex-2.6.4.tar.gz进入解压目录:cd flex-2.6.4再运行命令:./configuremakemake installflex-2.6.4.tar.gz下载链接永久有效提取码: ah24...原创 2020-05-10 13:46:06 · 4416 阅读 · 4 评论 -
c++中string的截取、替换和查找操作
1. 截取子串s.substr(pos, n) 截取s中从pos开始(包括0)的n个字符的子串,并返回s.substr(pos) 截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回2. 替换子串s.replace(pos, n, s1) 用s1替换s中从pos开始(包括0)的n个字符的子串3. 查找子串s.find(s1) 查找s中第一次出现s1的位置,并返回(包括0)s.rfind(s1) 查找s中最后次出现s1的位置,并返回(包括0)s.find_first...原创 2020-05-09 10:41:39 · 281 阅读 · 0 评论 -
c++队列queue的基本操作
back() 返回最后一个元素empty() 如果队列空则返回真front() 返回第一个元素pop() 删除第一个元素push() 在末尾加入一个元素size() 返回队列中元素的个数原创 2020-05-09 09:13:41 · 584 阅读 · 0 评论 -
c++中比较两个std::string对象是否相等
在java中比较两个string对象是否相等可以直接调用函数equals()if(name1.equals(name2)) //name的声明忽略{ print("相等");}而在c++中也很简单,用"=="就可以实现if(name1 == name2){ std::cout<<"相等"<<std::endl;}...原创 2020-05-08 16:15:23 · 10903 阅读 · 0 评论 -
c++中将一个vector对象插入另一个vector中
c++中的vector的插入操作有几个方法:vector.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置。vector.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。vector.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值...原创 2020-05-05 19:33:39 · 27351 阅读 · 1 评论 -
c++中的tuple(元组)
tuple是c++II里出现的类型,和pair类型类似,但pair类型是限定两个任意类型的变量,tuple更加强大,它可以有任意数量的成员。但是每个确定了的tuple类型的成员数目是确定不变的。1、tuple的用处当需要将多种不同类型的数据凑在一起的时候,我们可以有两个选择,那就是结构体和tuple,而tuple是更加方便的一个选择。下面展示tuple的简单示例:#include...原创 2020-04-28 21:56:02 · 2671 阅读 · 0 评论 -
c++中的map容器的插入操作
1、使用[ ]进行单个插入//头文件#include<map>map<string,int> mp;//可以使用{}对map进行赋值,这是c++II才有的。map<string,int> mp = { {"zhang",1}, {"li",2}, ...原创 2020-04-27 21:55:02 · 1897 阅读 · 0 评论 -
c++中的map和HashMap
一、map1、map成员上面可以看到Map接口的几个实现方式。简要说明:TreeMap是基于树(红黑树)的实现方式,即添加到一个有序列表,在O(log n)的复杂度内通过key值找到value,优点是空间要求低,但在时间上不如HashMap。C++中Map的实现就是基于这种方式HashMap是基于HashCode的实现方式,在查找上要比TreeMap速度快,添加时也没有任何顺序...原创 2020-04-18 17:50:08 · 4251 阅读 · 0 评论