![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
superfreak
知到极处便是行,行到极处便是知。我写博客的目的就是希望达到**行到极处便是知**
初级程序员一个,喜欢写HelloWorld。
学习过的语言按照时间排序为:C、C++、VB、C#、Java、Javascript、SQL、HTML、CSS、Python。
都不精通,都稀松平常,我继续努力,早日月薪5万!
展开
-
C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_31.cpp
继续学习STL算法,本文主要讲几种基本的搜索和排序算法:find:查找,返回一个输入迭代器,指向第一个含有搜索值的元素或序列的末端(没找到的话)find_if:查找满足一定条件的,需要一个函数作为参数。sort:排序。binary_search:搜索,在搜索之前,这个序列必须要先以递增的顺序排序,返回bool值,表明是否搜索到了目标。原创 2022-12-28 16:45:09 · 160 阅读 · 1 评论 -
C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_30.cpp
继续学习STL算法,本文主要讲:random_shuffle:随机洗牌,打乱位置。count:统计某个值的个数,比如说:vector中值为8的元素有几个呢?count_if:统计满足某个条件的元素的个数,比如说:vector中值大于9的元素有几个呢?min_element:得到最小的元素的位置,它返回一个迭代器,指向最小的那个元素。max_element:得到最大的元素的位置,它返回一个迭代器,指向最大的那个元素。accumulate:计算区间的元素的和,第三个参数值为总和的初始值。原创 2022-12-26 19:10:30 · 316 阅读 · 0 评论 -
C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_29.cpp
继续学习STL算法,本文主要讲:replace:用什么元素替代另外一个元素,比如说把10替代为100。replace_if:如果满足一个条件,就做一个替换,比如说如果大于9,就替换为100。replace_copy:先做替换,然后copy到另外一个地方。replace_copy_if:满足条件,就做替换,然后copy到另外一个地方。// Fig22_29_STL_Alg_replace_replace_if.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//原创 2022-12-25 16:22:31 · 124 阅读 · 0 评论 -
C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_28.cpp
确切的说remove翻译为移动比较好,因为这个函数不会改变vector中的元素,也不会破坏“删除”的元素,而是把所有没有“删除”的元素挪到了vector的前端。这个函数返回一个迭代器,指向vector中最后一个没有删除的元素后面的位置。remove_copy_if:“删除”那些满足条件的元素,再做拷贝。remove_copy:例子中就是先去做移除10这个元素的操作,然后复制copy到c.begin()的位置。remove_if:“删除”那些满足条件的元素,需要有一个一元谓词函数。原创 2022-12-25 14:57:59 · 108 阅读 · 0 评论 -
C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_27.cpp
如果两个序列的长度不同,则equal()返回false。==运算符用于进行比较操作。还有另外一个版本的equal,使用一个二元谓词函数作为第四个参数,估计是比较复杂,本例子并没有包含这个版本的equal()。lexicographical_compare()函数会检测第一个序列中的元素是否比第二个序列中的小?如果小,就返回true,如果大或者相等,就返回false。mismatch()函数比较两个序列的值并返回一个pair对象,pair中的两个迭代器表明两个序列中不匹配的元素所在的位置。原创 2022-12-23 15:53:59 · 103 阅读 · 0 评论 -
C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_26.cpp
fill_n:把容器中一定范围内的元素设定为某一个值,参数是:开始,count,数值,就是从某个位置开始,设定n个值,n就是这个count。generate_n:使用一个生成函数为容器中一定范围内的元素创建新的值。后面的几篇博客会讲STL的算法,这玩意看起来挺玄乎,其实就是一堆函数而已,没啥。fill:把容器中一定范围内的元素设定为某一个值,参数是:开始,结束,数值。generate:使用一个生成函数为容器中一定范围内的元素创建新的值。原创 2022-12-22 16:18:33 · 95 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter17.4.5追加文件
来看看如何在文件末尾追加数据。原创 2022-12-04 22:24:35 · 202 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter17.4.4命令行处理技术
C++有一种让在命令行环境中运行的程序能够访问命令行参数的机制,方法就是使用下面的main()函数:argc为命令行中参数的个数,其中包括命令名本身(就是构建出来的exe程序名)。argv是个指针,指向一个char的指针。这个有点抽象,所以可以将argv看作是一个指针数组,其中的指针指向了命令行参数。argv[0]是一个指针,指向命令行中的第一个字符串。源代码如下:运行的时候,可以先构建程序,然后进入cmd命令行模式,进入到couter.exe所在的目录,运行程序:这种方式下,这两个txt文件都原创 2022-12-03 19:39:30 · 131 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter17.4文件输入和输出
这个程序就是新建一个文件,输入文件的内容,然后又打印出来到屏幕上。原创 2022-12-02 20:03:53 · 298 阅读 · 0 评论 -
C++_串口编程_官方示例:监视通信事件
修改后,这个程序就是同步的模式了,就是会一直处于等待状态,虽然不实用,但是好歹是能用了。用VSPD 和 XCOM V2.6 创建虚拟的COM串口后,可以用XCOM 创建一个 从COM2 发送文本到COM1的操作,之后就有输出了,这个EV_RXCHAR事件发生了。这是微软官方的一个例子,这个例子中,如果不做修改,那么他是可以异步运行的,会出现一个错误:官方也说了一下,但是不太好懂,我拷贝过来放在这里,作为参考。后续还可以多研究研究,作为一个最权威,最基本的例子,这个作为入门我觉得很不错,推荐给大家。原创 2022-11-27 18:27:04 · 1396 阅读 · 0 评论 -
C++大学教程(第七版)Chapter14.4类模板-fig14_04
我为了不另外创建一个VS项目,就在上一个博文的工程里面直接新建了一个XXX.CPP文件,然后在含有main的CPP文件中,#include,工程结构如下图。本文主要聚焦于用一个函数模板来对类模板进行测试,看起来挺麻烦的,做起来似乎又不是很麻烦,让我自己写 我又写不出来,还是看看人家作者是怎么实现的吧。运行效果和上一篇博文是一样的。头文件请参考上一篇博文。原创 2022-11-24 11:47:56 · 285 阅读 · 0 评论 -
C++大学教程(第七版)Chapter14.4类模板-fig14_03
main()函数中来测试一下,看看效果。原创 2022-11-23 23:26:58 · 182 阅读 · 0 评论 -
C++大学教程(第七版)Chapter14.2函数模板-fig14_01
template 这样就是表示 T是个某个类型,是作为模板来使用的。用关键字typename 指出函数模板形参 ,实际上就是指任何内置类型。函数模板,打印数组。原创 2022-11-22 22:03:44 · 259 阅读 · 0 评论 -
一份CPP的面试题,这是要招聘大师吗?
cout原创 2022-11-15 12:17:24 · 603 阅读 · 3 评论 -
makefile基础(构建多文件程序)
对于每个源文件,编译器都会产生一个包含目标代码的文件,这些文件就是目标文件,Unix系统(Linux系统)下扩展名为*.o,windows 下为*.obj.本文主要是讲解有关makefile的基础知识,入门级的知识,但是很有用。摘自于《C语言程序设计现代方法》-作者K-N-KIng。为了易于构建大型程序,UNIX系统发明了makefile概念,这个文件包含了构建程序的必要信息。:链接器把上一步产生的目标文件和库函数的代码结合在一起生成可执行程序。构建大型程序和小型程序的基本步骤是一样的。原创 2022-11-11 06:54:57 · 566 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter7.3.5指针和const
然后微妙之处就在于:*pt是常量,并不意味着它指向的值是常量,age并不是常量,age还是可以改变的,只是不能通过*pt来改变,你直接修改age,还是可以的,就是不能用*pt来修改,因为,前面有const声明,告诉你这个*pt是const 是常量。看见没有,你传入的是:const int*,就是说你传入的是const int* 指针,而原型声明中需要的是一个int* ,即需要的是int 指针,编译器认为这是两个不同的参数类型,然后编译就失败了。而禁止将常量数组的地址赋给非常量指针,原创 2022-10-17 12:52:09 · 572 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter4.7指针
C++的指针很多人都很讨厌,不过这也是CPP牛A的地方。知识点有点多,感兴趣自己看看运行一下程序吧。4.7指针和自由存储空间。4.8指针数组和指针算术。原创 2022-10-15 11:09:26 · 943 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter18.1.9右值引用
右值包括字面常量(C风格字符串除外,它标识的是地址)、诸如x+y的表达式、以及返回值的函数(该函数返回的不能是引用)。等号左边的值就是左值,能够取地址的,有名字的就是左值。等号右边的值就是右值,不能取地址的,无名字的就是右值。引入右值引用最大的目的是。原创 2022-09-22 16:10:33 · 231 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter16.5.3自适应函数符和函数适配器
很遗憾,我没有读的太懂这个章节,在书中是P576页面。程序我附在下面,说老实话看到这里,我已经优点蒙了,真的。原创 2022-09-21 12:14:57 · 206 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter16.5.1函数对象_函数符概念
list模板有一个将谓词作为参数的remove_if()成员,该函数将谓词应用于区间中的每一个元素,如果谓词返回true,很多STL算法都使用函数对象(也叫函数符functor)函数符是可以以函数方式与()结合使用的任意对象。STL也定义了函数符概念。原创 2022-09-20 13:02:37 · 215 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter16.4.6关联容器_setops.cpp
最简单的关联容器就是set ,意思是集合。它的值类型和键是一样的,键是唯一的,也意味着集合中不会有相同的键,或者说值也是唯一的。multiset类似于set 只是可能有多个值的键是相同的。插入元素的时候,不需要指定插入位置,因为关联容器是排过序的,它知道新元素来了该放到哪里去。map中值与键的类型不同,键是唯一的,每个键只对应一个值。集合的运算主要有:并集、交集、差集、等,具体的请看例子代码。关联容器将值和键关联在一起,并使用键来查找值。set也使用模板参数类确定存储的值的类型。原创 2022-09-19 15:40:54 · 169 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter16.4泛型编程_概念_容器种类_Example16.12list.cpp
本小节主要讲述容器list的使用方法。原创 2022-09-13 15:23:48 · 159 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter16.4泛型编程_概念_改进和模型_inserts.cpp
答案就是用这三种迭代器:back_insert_iterator,front_insert_iterator,和insert_iterator。插入将添加心的元素,而不会覆盖原来的元素,并使用自动内存分配来确保能够容纳新的信息。back_insert_iterator将元素插入到容器的尾部,front_insert_iterator将元素插入到容器的前端。本博文主要是讲另外三种迭代back_insert_iterator,front_insert_iterator,和insert_iterator。原创 2022-09-13 13:22:10 · 171 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter16.4泛型编程_概念_改进和模型_copyit.cpp
第一个模版参数(这里为int)指出了被发送给输出流的数据类型,第二个模版参数(char)指出流使用的字符类型(另一个可能的值为wchar_t)。copy()的前两个迭代器参数表示要复制的范围,最后一个迭代器参数表示要将第一个元素复制到什么位置。前两个参数必须是(最好是)输入迭代器,最后一个参数必须是(或最好是)输出迭代器。用STL的话说,该模版是输出迭代器的一个。iterator头文件还定义了一个istream_iterator模版,是istream输入可以用作迭代器接口,它是一个输入迭代器概念的模型。原创 2022-09-11 13:14:46 · 205 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter16.4泛型编程_为何使用迭代器_迭代器类型
另外,将正向迭代器递增后,仍然可以对前面的迭代器解除引用,并可以得到相同的值,使用容器类的时候,无需知道其迭代器是如何实现的,也无需知道超尾是如何实现的,只需要知道begin()返回一个指向第一个元素的迭代器,end()返回一个指向超尾位置的迭代器即可。这里,具体的iterator类的写法并不重要,重要的是,有了迭代器类之后,书中的第二个find函数(即在链表中find)可以这样来写了。首先,每个容器类定义了相应的迭代器类型,对于其中的某个类,迭代器可能是指针,而对于另外的类,迭代器可能是对象。原创 2022-09-11 11:55:01 · 242 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter16.2智能指针模版类smrtptrs.cpp
ps的问题在于它只是一个常规的指针,它不是具有析构函数的对象。如果它是对象,那么对象过期的时候,让它的析构函数删除指向的内存。这就是:auto_ptr 、unique_ptr、shared_ptr 背后的思想。auto_ptr 是C++98提供的解决方案,C++11已经将它抛弃。这三个智能指针模版(auto_ptr 、unique_ptr、shared_ptr)都定义了类似指针的对象,可以将new获得(直接或者间接)的地址赋给这种对象。当智能指针过期时,其析构函数将使用delete 来释放内存。原创 2022-09-06 13:42:20 · 322 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter16.1string类_16.3hangman.cpp
Hangman直译为“上吊的人”,是一个猜单词的双人游戏。由一个玩家想出一个单词或短语,另一个玩家猜该单词或短语中的每一个字母 [1]就已流行起来,规则简单且有趣,在7步之内猜出单词,否则小人将会“上吊”。第一个人抽走单词或短语,只留下相应数量的空白与下划线。原创 2022-09-05 14:42:23 · 911 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter16.1.2string类输入
本程序实现了从一个文本文件中读取字符串,边界符号为“:”原创 2022-09-03 18:00:19 · 202 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter15.3异常_error1
本段演示abort()函数的使用,比较简单,一旦满足条件,就发生了一个异常,就调用了abort()。我用的IDE是VS2019 ,就弹出了这个对话框。原创 2022-09-03 10:58:10 · 247 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter14.2私有继承use_stui
共有继承的时候需要将对象作为一个命名的成员对象添加到类中。(例如student 类中有个string name ,那么这个name 就是string类的对象了,这个需要显式去声明)。下面的例子中,Student类重新写了,但是它对外提供的接口没有变,因此主函数所在的文件和上一个例子包含是一样的。私有继承的时候是将对象作为一个未被命名的继承对象添加到类中。私有继承提供的特性与包含是相同的:获得实现,但不获得接口。私有继承也可以用来实现has-a的关系。本小节主要讲私有继承。原创 2022-09-02 13:31:24 · 221 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter14.1包含对象成员的类
本质上都是使用这样的类成员:本身就是另一个类的对象。包含、私有继承和保护继承用于实现has-a的关系,而共有继承是实现了is-a关系。使用组合,类可以获得实现,但不能获得接口。例如,你有一个string name,就可以使用string 所带给你的能力。学生类,它有两个成员:名字,string name 和 用于表示分数的数组valarray sores;valarray是定义在头文件valarray中的,这个类用于处理数值,例如可以求和、求最大值,最小值等这是个模板类。...原创 2022-09-01 13:21:43 · 185 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter13.7继承和动态内存分配:usedma.cpp
如果基类采用了动态内存分配,并重新定义了赋值和复制构造函数,这将怎样影响派生类的实现呢?这个是取决于派生类的派生类的属性,如果派生类也使用了动态内存分配,那么就有一些技巧需要注意了。第一种情况:派生类不使用new ,那么就没有必要为派生类定义显式析构函数、复制构造函数、赋值运算符。派生类写成下面这样。就不需要做很多麻烦的事情,它没有使用new。在这种情况下,必须为派生类定义显式析构函数、复制构造函数、赋值运算符。主函数就是使用了上面声明的类,然后做了个输出。第二种情况:派生类使用了new。...原创 2022-08-27 17:50:35 · 268 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter13.6抽象基类
下面的例子中,为了帮着派生类访问基类数据,AcctABC提供了一些保护方法(即使用protected 来修饰的方法);(FullName() 方法和AcctNum()方法)。从Ellipse 和Circle类中抽象出共性,将这些共性放入到一个ABC(抽像类)中,然后从抽象类中派生出Circle类和Ellipse类 ,这样就可以使用基类的指针数组同时管理Circle类和Ellipse类的对象,即可以使用多态方法。(SetFormat()方法,Restore()方法)原创 2022-08-25 17:02:43 · 240 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter13.3多态公有继承例子(重点讲虚函数):usebrass2.cpp
数组中所有元素的类型必须相同,而Brass 和BrassPlus是不同的类型。但是可以创建指向Brass的指针数组,这样每个元素的种类都相同,由于使用的是共有继承,指向Brass的指针也可以指向BrassPlus对象。上一个例子usebrass1.cpp中,方法是通过对象(而不是指针或者引用)来调用的,这个很清楚,也没有使用上虚函数的特性。本例子可以说明虚函数的使用场景和特点。本例子的brass.h和brass.cpp 和usebrass1.cpp是一样的,这里就略过了。...原创 2022-08-23 11:46:12 · 242 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter13.3多态公有继承例子:usebrass1.cpp
换句话说:方法的行为取决于调用该方法的对象。brass 的英文为黄铜,也有钱的意思,在这里是表示基本支票账户。brassplus就是加强版的基本账户,这种账户它有一定的透支金额,(类似于信用卡取现),它是brass类的子类,即brassplus共有继承于brass。共有继承建立起了一种 is -a 的关系,即子类是一个基类,例如:猫是以一种动物,狗也是一种动物。本例子是使用对象类型来确定使用哪个版本的函数,基类对象调基类的版本,派生类调用派生类的版本,这个很清楚,也没有利用到虚函数的特性。原创 2022-08-23 11:11:37 · 282 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter13.1.3使用派生类
RatePlayer 共有派生于类TableTennisPlayer,增加了数据成员和Rating()方法。原创 2022-08-17 14:02:01 · 191 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter13.1一个简单的基类
第12章我看的有写糊涂,有一些例子就没有实践,有的实践了还出错,后续再研究。这个例子我是看懂了,真的看懂了,因为它很简单,不过也有一些可以学习的地方。usett0.cpp:(主函数在这里呢)来看看本例:就是一个乒乓球会员类。...原创 2022-08-17 10:48:07 · 114 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter11.6_Example11.16stone.cpp
转换函数就是opertortypename()例如operatordouble()这就是个转换函数,它是类的方法。注应该谨慎地使用隐士转换函数,最好是选择仅仅能显示调用的时候才会执行的函数。接收一个参数的构造函数将作为转换函数,即可以转换普通的数据类型为对象类型。还可以将类对象转换为普通的数据类型,这需要借助转换函数来进行。因此这个玩意,大家看看就好了,最好是不要用啊。本例子着重演示类的自动转换和强制类型转换。主函数在这个下面文件里面。...原创 2022-08-01 16:18:16 · 420 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:Chapter8.2.4_Example8.6strc_ref.cpp
引用非常适合于结构和类,下面的例子就演示了这一点。原创 2022-07-25 17:39:02 · 221 阅读 · 0 评论 -
C++PrimerPlus(第6版)中文版:chapter8.2ReferenceVariable_Example8.4swaps.cpp
本程序是想创建三个函数,分别用传引用、传地址、传变量的值的方式来实现交换两个数。注意第一次交换完毕后,wallet1 为350,wallet2 为 300,再交换一次用的是地址,这样wallet1 就为300,wallet2 为350 。而通过传值的方式,并没有实现wallet1 和wallet2 的互相交换,因此之后:wallet1 为300,wallet2 为350....原创 2022-07-25 11:06:20 · 172 阅读 · 0 评论