![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++学习笔记
文章平均质量分 55
学C++用来看业务代码,以便进行白盒,接口自动化测试
Anthony_tester
这个作者很懒,什么都没留下…
展开
-
C++ STL常用算法-67-集合算法-交集/并集/差集
这篇是学习常用算法的最后一篇,来学习三个集合算法。主要和数学几个概念有关系,交集 并集 和差集。下面分别用代码来练习每一个集合算法。算法简介:set_intersection //求两个容器的交集set_union //求两个容器的并集set_difference //求两个容器的差集1.set_intersection 交集求两个容器的交集函数原型:set_intersection()返回数据存储在另一个容器,容器的大小建...原创 2020-08-23 22:48:05 · 4839 阅读 · 1 评论 -
C++ STL常用算法-66-算数算法-accumulate和fill
这篇来学习两个数学算法算法,这两个算法在头文件numeric中,属于小众算法,其实我们大部分使用的算法都包含在头文件algorithm中。算法简介accumulate //计算容器元素累计总和fill //向容器中添加元素1.accumulate作用:计算区间内元素的总和函数原型:accumulate(iterator beg, iterator end, value);参数解释:参数3是一个起始叠加值,一般设置为0.#include <iostre...原创 2020-08-23 22:16:36 · 458 阅读 · 0 评论 -
C++ STL常用算法-65-拷贝和替换算法
继续学习C++中常用的算法基本使用,这篇学习拷贝和替换算法,一共有四个,用来操作容器中指定范围的元素的拷贝和替换操作。算法简介:copy //容器内指定范围的元素拷贝到另一容器中replace //将容器内指定范围的旧元素修改为新元素replace_if //容器内指定范围满足条件的元素替换为新元素swap //互换两个容器的元素1.copy 拷贝算法函数原型:copy(iterator beg, iterator end, iterator d...原创 2020-08-23 17:29:39 · 497 阅读 · 0 评论 -
C++ STL常用算法-64-排序算法_merge合并/reverse反转
这篇继续学习C++中的排序算法,还剩merge合并算法和reverse反转算法。合并就是把两个相同类型的容器合并到第三个容器中,这个合并是有条件的。反转就是原来是队列头部,反转后变成队列尾部。反转感觉在面试考察比较多,不管是JAVA还是C++的面试。1.merge合并作用:将两个容器合并到第三个容器函数原型:merge(iteator v1.begin,iteator v1.end,iteator v2.begin,iteator v2.end,iteator v3.begin);...原创 2020-08-22 22:48:43 · 710 阅读 · 0 评论 -
C++ STL常用算法-63-排序算法_sort/random_shuffle
这篇来学习几个常见的排序相关的算法,前面我们学习过sort()这个排序算法,传入迭代器开始和结束,第三个参数如果不填,默认就是升序,如果第三个参数是一个仿函数,返回值类型是bool,也叫谓词,就按照你传入的规则进行排序。1.排序相关的算法sort //对容器内元素进行排序random_shuffle //洗牌,指定范围内元素随机调整次序merge //容器元素合并,并存储到另一个容器中reverse //反转指定范围的元素2.sort作用:给容器指定范围的元素进行..原创 2020-08-22 22:15:15 · 416 阅读 · 0 评论 -
C++ STL常用算法-62-查找算法_binary_search/count/count_if
前面一篇学习了常用查找算法的三个方法,现在接着学习剩下三个查找相关的算法。binary_search,这个二分查找,在任何语言中都是重点需要掌握的,面试经常被考察。二分查找是一种解决问题的思想,在实际工作中排查错误,定位什么节点开始出现错误的,也是通过人工二分查找或者自动化脚本二分查找去定位。count是查找出现元素的个数,count_if是带条件查找统计结果的函数。1.binary_search 二分查找功能描述:查找指定元素是否存在,返回布尔值类型函数原型:bool binary_s.原创 2020-08-22 13:16:26 · 510 阅读 · 0 评论 -
C++ STL常用算法-61-查找算法_find/find_if/adjacent_find
这篇来学习C++中常用的查找相关的算法,有些是查找元素,有些是条件查找,有些是查找统计次数,还有二分查找算法等。算法简介1.find函数原型:find(v.begin, v.end, val)给定一个容器迭代区间,查找元素val是否存在。找到就返回指定位置迭代器,找不到就返回结束迭代器位置。#include <iostream>#include <string>#include <vector>#include <algorithm&原创 2020-08-20 23:13:34 · 588 阅读 · 0 评论 -
C++ STL常用算法-60-遍历算法_for_each 和 transform
前面学习过各种容器,和容器的常用API调用练习,还涉及一点仿函数。这篇开始学习C++中STL提供的一些常用的算法,这些算法都是采用模板类实现,调用这些算法的过程中,很多需要传入一个函数对象作为参数,可以是普通的函数,也可以是仿函数。这篇学习常用遍历容器的算法 for_each,和搬运算法transform概述:算法主要是由头文件<algorithm> <functional> <numeric>组成<algorithm>是所有STL头文件中最大的.原创 2020-08-20 22:15:40 · 607 阅读 · 0 评论 -
C++ map容器-59-map容器排序和仿函数
这篇结束学习map容器的API,通过学习map容器的排序,引出一个新的知识点:仿函数,然后继续学习仿函数相关的知识点。1.map容器默认排序我们知道map容器是该容器本身提供的sort()排序算法,不是直接调用全局静态函数sort(map)去排序。在map容器中默认排序规则是:根据key的ASCII码表进行排序,下面我们用代码来看看。#include <iostream>#include <string>#include <map>using n.原创 2020-08-16 21:56:20 · 1713 阅读 · 0 评论 -
C++ map容器-58-map容器大小/交换/插入/删除
接着学习map容器的常见API操作,依然是大部分前面学习过的,名称相同的API的基本调用测试。本篇学习map容器大小相关API,然后学习容器交换,容器元素插入和删除,清空等操作。1.map容器大小操作统计map容器大小的函数原型#include <iostream>#include <string>#include <map>using namespace std;void test01(){ // map容器的构造 map原创 2020-08-13 23:09:29 · 4446 阅读 · 0 评论 -
C++ map容器-57-对组和map构造/赋值
这篇开始学习C++中的Map容器,也叫字典,字典中的元素是键值对形式存在的。在学习map容器之前,我们先学习C++中的一个对组的小知识点。然后学习map容器的构造和赋值相关API。1.对组概念:成对出现的数据,利用对组可以返回两个数据。这个特点有点类似python中的元组。对组的两种创建方式下面写简单的练习代码,练习对组的两种创建方式,和如何获取对组中两组数据的方法。#include <iostream>#include <string>using n.原创 2020-08-12 22:42:33 · 2705 阅读 · 0 评论 -
C++ set容器-56-集合容器大小/交换/插入/删除操作
这篇学习set容器的大小操作,大小主要有判断是否为空,size()还有交换swap(),最后来学习下set容器的插入和删除操作。基本上那些常用的API,前面都学习过。1.set容器大小操作和交换函数原型注意这里set容器没有resize(),重新指定容器大小的操作。#include <iostream>#include <string>#include <set>using namespace std;void printSet(c.原创 2020-08-11 22:55:05 · 2799 阅读 · 0 评论 -
C++ set容器-55-集合容器基本概念和构造赋值操作
这篇开始学习set容器,set容器经常也叫集合容器。set容器有一个非常鲜明的特点就是插入元素后,实现自动排序功能。这篇先来学习set/multiset容器的基本概念和构造方法和赋值操作1.set基本概念所有的元素在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现。2.set和multiset区别set不允许容器中有重复的元素multiset运行容器中有重复的元素3.set构造和赋值先来学习下如何创建set和mutliset容器和赋值..原创 2020-08-10 22:30:20 · 2377 阅读 · 0 评论 -
C++ list容器-54-链表存取和反转和排序
继续学习list容器相关常见的API,这边学习三点,分别是list容器的存取操作,和list容器反转,这个反转经常在面试的时候被问到,最后来看看list容器的排序操作。1.list的存取注意:list容器没有和其他容器那样,根据[]和at函数获取某个位置的元素。原因是和list双端链表的数据结构有关系,由于不是连续存储,所以这里索引去查找元素就行不通。在list容器中两个api,我们可能需要经常使用,获取头部和尾部的元素,front()和back()#include <iost.原创 2020-08-09 22:17:11 · 529 阅读 · 0 评论 -
C++ list容器-53-链表大小操作和插入删除操作
这篇接着前面的list容器的基本概念之后,这里继续学习list容器的常用API。先学习list的大小相关操作,也就是元素个数,判断是否为空,重置大小。然后学习list容器的插入和删除,插入是重点,至少有头尾插入和中间任意元素位置插入。1.list容器大小操作函数原型这几个api,我们前面学习其他容器都接触过。下面使用简单代码来测试下#include <iostream>#include <string>#include <list>using原创 2020-08-06 22:58:04 · 873 阅读 · 0 评论 -
C++ list容器-52-链表基本概念和构造函数/赋值
前面学习的容器或叫数据结构都是连续存储的空间。例如数组和vector都是在一块连续的内存空间去存储数据。既然有连续存储当然也就有非连续存储。这里开始学习非连续存储的数据结构,list,也叫链表1.list的基本概念list是一种将数据进行链式存储的数据结构,也叫链表。list是一种物理存储单元上非连续的存储结构,将数据元素的逻辑顺序是通过链表中的指针链接实现的。链表的组成:链表由一系列结点组成。结点的组成:一个存储数据元素的数据域,另一个是存储下一个结点地址的指针域链表有单链表和双.原创 2020-08-04 23:53:53 · 1085 阅读 · 0 评论 -
C++ queue容器-51-队列容器基本概念和常用接口
这一篇学习queue容器,也叫队列容器。例如生活中的排队场景,就是一个队列。队列这种数据结构有先进先出的特点(First In First Out)FIFO, 队列有两个出口。1.queue特点1)队列有两头,分别队尾和对头2)插入元素只能从队尾操作,函数是push(), 移除元素只能从对头操作,函数是pop()3) 使用 back()获取队尾元素,front()获取对头元素2.queue常用接口上面这个图也已介绍一些队列的接口,这里我们先看构造函数,赋值和返回对头,队尾操.原创 2020-08-03 22:46:04 · 686 阅读 · 0 评论 -
C++ stack容器-50-栈容器基本概念和常用接口
接着学习下一个容器,stack,栈容器。当然后面还要学习一个队列容器,两个有点相似一般一起对比和学习。本篇主要学习栈容器的基本概念和常用接口的基本使用。1.什么是stackstack是一种先进后出(First In Last Out)FILO的容器,它只有一个出口。2.stack的特点下面这张图给出栈的特点栈中只有顶部元素运行外部使用,所以,栈容器没有遍历操作。3.stack的常用API根据上面这张图,栈就基本操作API都在顶部元素的入栈和出栈操作,还有统计...原创 2020-08-02 23:03:16 · 460 阅读 · 0 评论 -
C++ deque容器-49-deque和vector容器练习
前面把vector容器和deque容器都学习完,现在找一个实际的例子,我们用这两个容器的特点和相关API去做一个练习题。模拟,在比赛过程中,评委给选手打分,例如十个评委打分完成,去除一个最高分和最低分,求8个评委打分的平均值。1.需求一共有5个选手ABCDE,十个评委打分,去除最高分和最低分,要求大于选手名称和平均分。2.实现思路下面是实现思路,步骤拆分1.创建5名选手,放到vector中2.遍历vector容器,取出每一个选手,执行for循环,可以把10个评分分别存入d..原创 2020-08-02 22:40:15 · 475 阅读 · 0 评论 -
C++ deque容器-47-deque大小操作和插入和删除
继续学习双端数组deque的api,前面学习了deque的构造和赋值操作,还有始终一样的遍历容器代码操作。这里先学习deque大小操作,主要有判断容器是否为空,元素总数多少,还有修改容器大小操作。然后学习deque的插入和删除相关API1.deque的大小操作函数原型首先empty() 如为空返回1,如果不为空返回0#include <iostream>#include <string>#include <deque>using name.原创 2020-07-31 23:22:15 · 1190 阅读 · 0 评论 -
C++ deque容器-46-deque构造函数和赋值操作
前面学习了vector单端数组容器,既然有单端也就有双端。vector是限制在尾部新增和删除元素,实际上还有一种数据结构是两头都可以添加和删除元素,这里开始学习deque双端数组容器。1.deque和vector区别vector对于头部的插入删除效率低,数据量越大,效率越低。deque相对而言,对头部的插入删除速度会比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关。上图中,中间这个多个方格就是双端数组,两头都有插入和删除方法,中间还有insert(.原创 2020-07-30 23:28:39 · 875 阅读 · 1 评论 -
C++ vector容器-45-vector互换和节省空间和预留空间
这篇来学习vector一个互换操作,也就是有两个vector对象,可以通过一个api,把两个对象互换过来。实际上,就是在内存中交换了对象的指针,原来的指针指向新的vector对象。这种交换有时候是很有必要,特别是匿名vector对象进行交换后可以节约内存空间,最后来看看vector的预留空间相关的知识点。1.两个vector互换互换的函数很简单swap(vect),当前容器和传进来的vect容器进行交换。下面代码先创建两个vector对象,然后进行打印交换前和交换后的容器元素。#incl.原创 2020-07-28 23:34:22 · 4010 阅读 · 1 评论 -
C++ vector容器-44-vector插入和删除以及存取
本篇继续学习vector容器,前面学习了vector是一个单端数组。也就是说vector的插入和删除,基本上都是在数组的末端进行。本篇要学习的vector插入和删除的方法就能体现这个特点,最后学习vector的存取操作1.vector的插入和删除在vector和插入、删除相关的方法主要有下面几个push_back(ele); // 尾部插入元素elepop_back(); // 删除最后.原创 2020-07-27 23:09:12 · 3054 阅读 · 0 评论 -
C++ vector容器-43-vector构造函数和赋值操作
在C++中常用的string的API都学习完了,这篇开始学习vector容器。vector有点类似数组,但是一个最懂扩容和支持尾部插入和删除的类似数组的容器。vector数据结构和数组非常相似,也称为单端数组,不同之处在于数组是静态空间,而vector可以动态扩容。数组一旦创建了,就不可以改变,所以叫静态。也就是不可以给数组扩容,只能新建一个更大容量的数组。动态扩容不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。1.vector构造函数构造函数原型:.原创 2020-07-26 23:09:47 · 6309 阅读 · 0 评论 -
C++ string容器-42-string比较存取和插入删除函数
继续学习string类中的API,先看看字符串比较,然后学习字符串存取,最后看看字符串中如何插入和删除字符的函数。1.字符串比较在C++中string中字符串比较是使用函数compare,比较两个str的ASCII码表顺序。把字符串切割成一个一个字符,两个字符串从左到右相同位置上字符,一个一个比较,大小关系是ASCII编码表对于int数字的大小。例如字母a要比字母b编码排前面,所以a对应数字比字母b要小。#include <iostream>#include <string原创 2020-07-26 18:15:17 · 750 阅读 · 0 评论 -
C++ string容器-41-string拼接和查找替换函数
本篇继续来学习string这个类,一个string容器,里面就是一些C语言 char * c风格的字符组成。这里来学习下字符串的拼接功能,还有字符串查找和替换方法。1.字符串拼接功能在string中字符串拼接功能有下面几个函数,主要是重载+=操作符合使用append函数,尾部追加的意思string& operator+=(const char* str); // 重载+=操作符string& operator+=(const char c); // 重载+=操作符原创 2020-07-24 23:13:59 · 1059 阅读 · 0 评论 -
C++ string容器-40-string构造函数和赋值函数
接着学习C++中的string容器。字符串操作在任何编程语言都很常见,每个语言都提供了一些常见的API,例如字符串查找,替换,删除等。这篇来学习字符串的构造函数和赋值操作。1.string的基本概念string是C++风格的字符串,而string本质上是一个类。string和har * 区别:char *是一个指针,string是一个类,类内部封装了char *,管理这个字符串,是一个char *形的容器。string类有这些特点,string类内部封装了很多成员方法,例如查找find, 拷贝co原创 2020-07-21 23:29:53 · 2811 阅读 · 0 评论 -
C++STL-39-标准模板库STL的一些概念和vector初识
这篇开始学习STL的一些基础概念,虽然概念很枯燥,不好理解,但是我们先要属性概念。有一些概念是其他编程语言学习过,比较好理解。有一些是不好理解。1.STL基本概念大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作。为了建立数据结构和算法的一套标准,诞生了STL。STL(Standard Template Library)标准模板库。从广义上分为,容器(container) 算法(algorithm) 迭代器(iterator)。容器和算法之间同迭代器进行无缝连接。STL几乎所.原创 2020-07-20 23:09:02 · 346 阅读 · 0 评论 -
C++模板-38-类模板练习-自定义数组类-剩余实现
上一篇介绍了利用模板类实现自定义数组类的一些方法,包括有参构造和拷贝构造和赋值=号函数,还有析构函数。这篇还继续实现后续需求。有尾部插入元素和尾部删除元素,还有根据索引获取元素,以及获取数组容量和获取数组元素大小的方法。1.剩余代码接着上一篇,在析构函数代码前面,写尾插法和尾删法,还有operator[]根据索引获取元素方法,以及上一篇定义了m_Capactiy和m_Size是私有成员变量,这里我们需要提供get方法让外部使用。#include <iostream>#inc.原创 2020-07-19 19:13:43 · 453 阅读 · 0 评论 -
C++模板-37-类模板练习-自定义数组类
到这里,模板相关基本学习完,现在来利用模板类写一个代码例子。这个例子就是自定义一个数组模板类,需要实现数组的一些常用操作。例如拷贝,有参构造,查找,删除等。1.自定义数组类需求模板案例描述:实现一个通用的数组类,要求如下1)可以对内置数据类型以及自定义数据类型的数据进行存储2)将数组中的数据存储到堆区3)构造函数中可以传入数组的容量4)提供对应得拷贝构造函数以及operator=防止浅拷贝问题5)提供尾插法和尾删法对数组中的数据进行增加和删除6)可以通过下标的方式访问数组中的元素.原创 2020-07-18 23:38:22 · 1651 阅读 · 0 评论 -
C++模板-36-类模板和继承和友元
这里来学习下类模板作为父类,那么子类继承父类是有问题,这种问题是什么,如何解决。然后看看类模板配合友元函数的类内实现和类外实现。1.类模板和继承如果父类是一个模板类,子类继承的时候会有下面几个点需要注意当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型 如果不指定,编译器无法给与子类分配内存 如果想灵活指定出父类中T的类型,子类也需要为类模板先用代码演示1,2点,如果不指定父类T的类型,这个编译错误是什么#include <iostream>.原创 2020-07-14 23:38:15 · 480 阅读 · 0 评论 -
C++模板-35-类模板对象做函数参数的三种情况
接着来学习类模板作为函数参数传入是如何使用,如果需要把类模板作为参数一起传入到函数中,一般有三种情况,下面分别用代码来解释这三种情况。1.指定传入类型就是在参数中,就指定类型,而不是<class T1, class T2>, 而是直接指定确定类型,例如<string, int>。看下面代码,在printPerson1()就是参数指定特定类型#include <iostream>#include <string>using namespa.原创 2020-07-12 23:13:53 · 2890 阅读 · 1 评论 -
C++模板-34-类模板中成员函数的创建时机
这篇来学习下类模板中普通函数的创建时机。如果是普通的类的成员函数,在类的实例化对象创建过程中就可以创建成员函数。但是在类模板中,成员函数是不会里面创建。因为这里T这个类型如果没有被确定,成员函数是无法创建的,而是这个成员函数在调用的时候才被创建。下面使用代码来证明这个结论。类模板中,成员函数是在被调用的时候才创建代码如下#include <iostream>#include <string>using namespace std;class Person1{原创 2020-07-12 16:19:43 · 1353 阅读 · 0 评论 -
C++模板-33-类模板和函数模板的区别
这篇开始学习类模板相关知识,本篇主要学习什么是类模板,还有类模板和函数模板的区别1.类模板语法template <class T>类模板声明下面是函数就是函数模板,如果是类就叫类模板2.一个类模板例子下面写一个Person类 类模板,看看如何定义和如何使用类模板#include <iostream>#include <string>using namespace std;//类模板template <class T..原创 2020-06-11 23:06:45 · 5070 阅读 · 1 评论 -
C++模板-32-普通函数和模板函数调用规则
上一篇学习了普通函数和模板函数的区别,这一篇继续学习两者的调用规则。也就是在同一个文件中,如果同时存在普通函数名称和模板函数名称一致,那么两者之间的调用规则是如何。1.如果普通函数和模板函数都可以调用,优先调用普通函数。下面代码,普通函数和模板函数名称一样,传入参数也一致,运行代码是调用模板函数还是普通函数#include <iostream>using namespace std;//模板函数template <class T>void myAdd(T .原创 2020-06-09 22:42:29 · 2941 阅读 · 0 评论 -
C++模板-31-普通函数和模板函数的区别
前面学习了使用函数模板来实现一个数组排序的例子,基本上体会到了函数模板的好处,就是针对参数类型会自动推导,减少了重复代码。那么函数模板和普通的函数有什么区别呢,本篇来学习这个。1.普通函数调用时可以发生自动类型转换下面来举例一个简单的加法普通函数,看看怎么发生的自动类型转换#include <iostream>using namespace std;//普通函数int myAdd(int a, int b){ return a + b;}void test原创 2020-06-08 23:07:10 · 476 阅读 · 0 评论 -
C++模板-30-函数模板注意事项和数组排序练习
前面学习了函数模板,有了一个基本的了解。我们先来学习函数模板,后面还有一个类模板。先看看函数模板使用需要注意哪些事项,然后通过一个数组排序来练习函数模板。1.函数模板注意事项1)自动类型推导,必须推导出一致的数据类型T,才可以使用2)模板必须要确定T的数据类型,才可以使用例子template <typename T>返回类型 函数名称(T a, T b)第一点,编译器会进行自动类型推导,但是上面这个T要类型一致才可以,例如两个参数都是int或者float类型,不可.原创 2020-06-02 23:14:35 · 384 阅读 · 1 评论 -
C++模板-29-什么是模板和一个简单的例子
这篇开始进入模板的学习,接下来要学习模板,各种函数模板和类模板,然后学习几个标准的类,例如string类的,然后过度到学习各种容器。1.什么是模板模板就是建立通用模具,大大提高代码复用性。2.没有模板是什么样的例如,我们来做这个小练习,交换两个数的值,例如有两个int类型交换,两个float类型交换。由于前面的知识,代码大概是这样去写。#include <iostream>using namespace std;void SwapInt(int &..原创 2020-05-26 23:10:04 · 375 阅读 · 0 评论 -
C++面向对象-28-读写二进制文件
前面学习了对文本文件的读写操作,有了这个基础,我们来学习下,C++对二进制文件的读写操作。因为是二进制,所以不管是读还是写文件,其中打开方式要指定为iso::binary。1.写二进制文件二进制方式写文件主要利用流对象调用成员函数write()函数原型:ostream& write(const char * buffer, int len);参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数来看一个代码例子#include <iostream&.原创 2020-05-24 22:47:29 · 651 阅读 · 0 评论 -
C++面向对象-27-读写文本文件
前面学习了多态,现在我们开始学习一些C++的武器,也就是一些常用的类库。程序在运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。通过文件可以将数据持久化,也就是把数据写入文件,叫序列化,程序读取文件,显示出各种数据。这个过程叫反序列化。这篇开始我们来学习下C++如何读写文件。1.文件分文本文件和二进制文件1)文本文件,文件以文本的ASCII码形式存储在计算机中2)二进制文件,文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。(都是01这样的数据)2.C...原创 2020-05-24 21:31:46 · 1156 阅读 · 0 评论