c++
tianguiyuyu
这个作者很懒,什么都没留下…
展开
-
AVL树
本节内容介绍AVL树,具体看下面:具体看如下代码:AVLTree.h#pragma oncestruct AVLNode;typedef struct AVLNode* Position;typedef struct AVLNode* AVLTree;typedef int ElementType;AVLTree M...原创 2020-04-24 12:16:56 · 203 阅读 · 0 评论 -
c++中实现智能指针
智能指针是通过引用计数的方式,对指针对象的生命周期进行管理的一种技术方法,它将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指针指向同一对象,当此用引用计数为0时,自动释放对象。 每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个对象进行赋值时...原创 2020-04-21 22:53:49 · 240 阅读 · 0 评论 -
STL综合案例
案例:学校演讲比赛1)某市举行一场演讲比赛,共有24个人参加,按参加顺序设置参赛号。比赛共三轮,前两轮为淘汰赛,第三轮为决赛。2)比赛方式:分组比赛第一轮分为4个小组,根据参赛号顺序依次划分,比如100-105为一组,106-111为第二组,依次类推,每组6个人,每人分别按参赛号顺序演讲。当小组演讲完后,淘汰组内排名最后的三个选手,然后继续下一个小组的比赛。 第二轮分为...原创 2020-04-21 09:38:17 · 253 阅读 · 0 评论 -
STL中常用的集合算法
set_union(),set_intersection(),set_difference()set_union: 构造一个有序序列,包含两个有序序列的并集。 set_intersection: 构造一个有序序列,包含两个有序序列的交集。 set_difference: 构造一个有序序列,该序列保留第一个有序序列中存在而第二个有序序列中不存在的元素。vector<int>...原创 2020-04-20 10:13:04 · 244 阅读 · 0 评论 -
常用的拷贝和替换算法
copy():复制vector<int> vecIntA; vecIntA.push_back(1); vecIntA.push_back(3); vecIntA.push_back(5); vecIntA.push_back(7);...原创 2020-04-20 09:39:43 · 348 阅读 · 0 评论 -
STL中常用的排序算法
merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个序列。例如:vecIntA,vecIntB,vecIntC是用vector<int>声明的容器,vecIntA已包含1,3,5,7,9元素,vecIntB已包含2,4,6,8元素vecIntC.resize(9); //扩大容量merge(vecIntA.begi...原创 2020-04-20 08:09:49 · 644 阅读 · 0 评论 -
STL中常用的查找算法
adjacent_find()在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器。否则返回past-the-end。vector<int> vecInt; vecInt.push_back(1); vecInt.push_back(2); vecInt.push_back(2...原创 2020-04-20 07:19:01 · 201 阅读 · 0 评论 -
STL中transform和for_each的区别和联系
for_each: 遍历元素,函数对象参数一般使用引用,没有返回值transform:变换元素,可以将一个容器内的内容变换到另外一个容器,也可以将两个容器内的内容变换到另外一个容器,函数对象一般不适用引用(因为涉及到容器间的内容转移和变换,使用引用可能会导致不可避免的麻烦),函数对象有返回值。看一下下面的代码://一般情况下:for_each所使用的函数对象,参数是引用,没有返...原创 2020-04-19 11:53:22 · 664 阅读 · 1 评论 -
STL中遍历算法:for_each和transform
for_each()for_each: 用指定函数依次对指定范围内所有元素进行迭代访问。该函数不得修改序列中的元素。void show(const int &iItem){ cout << iItem;}main(){ int iArray[] = {0,1,2,3,4}; vector<int...原创 2020-04-19 11:27:29 · 416 阅读 · 0 评论 -
STL中的预定义函数对象和函数适配器
预定义函数对象:STL模板库中封装的函数函数适配器: 对于STL中的有些算法,其输入参数有些限制(比如参数个数等),因此需要用到函数适配器将参数适配成适合算法的输入,这个是我个人的理解。#include <iostream>#include "string"#include <vector>#include <list>#include "set...原创 2020-04-19 07:58:14 · 249 阅读 · 0 评论 -
STL算法设计理念--二元谓词在set集合中的应用
具体看如下代码:#include<iostream>#include "string"#include <vector>#include <list>#include "set"#include <algorithm>#include "functional"using namespace std;template<...原创 2020-04-19 07:05:25 · 217 阅读 · 0 评论 -
STL中的二元函数对象和二元谓词
二元函数对象:重载运算符()的函数有两个参数二元谓词:函数有两个输入参数,并且返回值为bool类型具体的可以看如下代码:#include<iostream>using namespace std;#include "string"#include <vector>#include <list>#include "set"#incl...原创 2020-04-18 22:12:08 · 484 阅读 · 0 评论 -
STL中的一元谓词
一元谓词指的是函数参数个数为一个,函数返回值为bool类型的函数对象。(一元谓词 函数参数1个,函数返回值是bool类型,可以作为一个判断式,谓词可以是一个仿函数,也可以是一个回调函数。)学习STL的算法,一定要分清函数的参数和返回值是迭代器,还是函数对象,还是谓词。具体看如下代码:#include<iostream>using namespace std;#inc...原创 2020-04-18 17:39:10 · 957 阅读 · 1 评论 -
STL中的函数对象
函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的operator()来实现的。“在标准库中,函数对象被广泛地使用以获得弹性”,标准库中的很多算法都可以使用函数对象或者...原创 2020-04-18 16:56:14 · 200 阅读 · 0 评论 -
STL中的算法基础
10.3.1算法基础10.3.1.1算法概述算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。 <algorithm>是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、反转、排序、合并等等。 <numeric>体积很小,只包括几个在序列...原创 2020-04-18 16:52:19 · 662 阅读 · 0 评论 -
预定义函数对象和适配器
1)预定义函数对象基本概念:标准模板库STL提前定义了很多预定义函数对象,#include <functional> 必须包含。//1使用预定义函数对象://类模板plus<> 的实现了: 不同类型的数据进行加法运算void main41(){ plus<int> intAdd; int x = 10;...原创 2020-03-26 13:16:47 · 202 阅读 · 0 评论 -
C++中二元函数对象和二元谓词
在c++ STL算法中,在算法的输入和输出中,一定要分清是函数对象,还是谓词,还是迭代器。具体看如下代码,注意看注释:#include<iostream>using namespace std;#include "string"#include <vector>#include <list>#include <set>#i...原创 2020-03-26 10:36:43 · 969 阅读 · 1 评论 -
STL中的find_if函数
一元函数对象:函数参数1个;二元函数对象:函数参数2个;一元谓词 函数参数1个,函数返回值是bool类型,可以作为一个判断式 谓词可以使一个仿函数,也可以是一个回调函数。二元谓词 函数参数2个,函数返回值是bool类型具体看如下代码,template<typename T>cl...原创 2020-03-26 00:37:11 · 880 阅读 · 0 评论 -
STL中的函数对象
在学习STL中的算法的时候,要分清函数返回的是迭代器还是函数对象。所谓的函数对象,就是在一个类模板中,重载了操作符()。函数对象跟普通函数的区别就在于函数对象可以保留状态信息。重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个类对象,如果没有上下文...原创 2020-03-24 15:09:33 · 865 阅读 · 0 评论 -
各个容器的使用时机
deque的使用场景:比如排队购票系统,对排队者的存储可以采用deque,支持头端的快速移除,尾端的快速添加。如果采用vector,则头端移除时,会移动大量的数据,速度慢。 vector与deque的比较: 一:vector.at()比deque.at()效率高,比如vector.at(0)是固定的,deque的开始位置却是不固定的。 二:如果有大量释放操作的话,vector花的时间更...原创 2020-03-21 16:08:35 · 147 阅读 · 0 评论 -
STL中存储的元素都是按照值拷贝得来的
理论提高:所有容器提供的都是值(value)语意,而非引用(reference)语意。容器执行插入元素的操作时,内部实施拷贝动作。所以STL容器内存储的元素必须能够被拷贝(必须提供拷贝构造函数)。下面举一个源代码的例子,具体如下:#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace st...原创 2020-03-21 15:57:56 · 362 阅读 · 0 评论 -
multimp简介
multimap与map的区别:map支持唯一键值,每个键只能出现一次;而multimap中相同键可以出现多次。multimap不支持[]操作符。具体代码看如下:#include <iostream>using namespace std;#include "map"#include "string"//Multimap 案例://1个key值可以对应多个valu...原创 2020-03-21 15:21:55 · 185 阅读 · 0 评论 -
map容器
map/multimap的简介map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。 map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。 map的具体实现采用红黑树变体的平衡二叉树的数据结构。在插入操作和删除操作上比vector快。 map可以直接存取key所对应的val...原创 2020-03-21 12:02:55 · 526 阅读 · 0 评论 -
multiset用法
#include <iostream>using namespace std;#include "set"void main1001(){ multiset<int> set1; int tmp = 0; printf("请输入multiset集合的值:"); scanf("%d", &tmp); while (tmp != 0) {...原创 2020-03-21 00:21:49 · 800 阅读 · 0 评论 -
set容器
set/multiset的简介set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。 set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树。在插入操作和删除操作上比vector快。 set不可以直接存取元素。(不可以使用at.(pos)与[]操作符)。 multiset与set的区别:set支持唯一键值,每个...原创 2020-03-21 00:19:11 · 488 阅读 · 0 评论 -
priority_queue优先队列
优先级队列priority_queue最大值优先级队列、最小值优先级队列 优先级队列适配器 STL priority_queue 用来开发一些特殊的应用,请对stl的类库,多做扩展性学习 priority_queue<int, deque<int>> pq; priority_queue<int, vector<in...原创 2020-03-20 22:51:19 · 163 阅读 · 0 评论 -
List容器
List简介list是一个双向链表容器,可高效地进行插入删除元素。 list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符。It++(ok) it+5(err) #include <list>list对象的默认构造list采用采用模板类实现,对象的默认构造形式:list<T> lstT; 如:list<int> lst...原创 2020-03-20 14:15:49 · 289 阅读 · 0 评论 -
Queue容器
Queue简介queue是队列容器,是一种“先进先出”的容器。 queue是简单地装饰deque容器而成为另外的一种容器。 #include <queue>queue对象的默认构造queue采用模板类实现,queue对象的默认构造形式:queue<T> queT; 如:queue<int> queInt; //一个存放...原创 2020-03-20 14:12:41 · 198 阅读 · 0 评论 -
stack容器
Stack简介stack是堆栈容器,是一种“先进后出”的容器。 stack是简单地装饰deque容器而成为另外的一种容器。 #include <stack>stack对象的默认构造stack采用模板类实现, stack对象的默认构造形式: stack <T> stkT;stack <int> stkInt; //一个存...原创 2020-03-20 13:29:00 · 1192 阅读 · 0 评论 -
Deque容器
Deque容器是一个双端数组。Deque简介deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的。 deque在接口上和vector非常相似,在许多操作的地方可以直接替换。 deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲)。 deque头部和尾部添加或...原创 2020-03-20 13:24:36 · 185 阅读 · 0 评论 -
c++中的vector容器
1 Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器。 vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲)。vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时2 vector对象的默认构造 vector采用模板类实现,vector对象的默认构造形式vector&...原创 2020-03-20 12:33:22 · 256 阅读 · 0 评论 -
STL中的string类
1String概念string是STL的字符串类型,通常用来表示字符串。而在使用string之前,字符串通常是用char*表示的。string与char*都可以用来表示字符串,那么二者有什么区别呢。string和char*的比较string是一个类, char*是一个指向字符的指针。 string封装了char*,管理这个字符串,是一个char*型的容器。strin...原创 2020-03-20 12:11:35 · 330 阅读 · 0 评论 -
STL(标准模板库)理论基础
10.1.1基本概念STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类和模...原创 2020-03-20 11:46:05 · 497 阅读 · 0 评论 -
文件IO
文件输入流 ifstream 文件输出流 ofstream 文件输入输出流 fstream 文件的打开方式 文件流的状态 文件流的定位:文件指针(输入指针、输出指针) 文本文件和二进制文件9.3.1文件流类和文件流对象输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的。在实际应用中,常以磁盘文件作为对象。即从磁盘文件读取数据,将数据输出到磁盘文件。和文...原创 2020-03-19 12:52:55 · 191 阅读 · 0 评论 -
标准输出流
/*标准输出流对象cout cout.flush() cout.put() cout.write() cout.width() cout.fill() cout.setf(标记)*/具体代码如下:#include <iostream>using nam...原创 2020-03-19 12:48:34 · 192 阅读 · 0 评论 -
标准输入流
标准输入流对象cin,重点掌握的函数 cin.get() //一次只能读取一个字符 cin.get(一个参数) //读一个字符 cin.get(三个参数) //可以读字符串 cin.getline() cin.ignore() cin.peek() cin.putback(...原创 2020-03-19 12:46:44 · 328 阅读 · 0 评论 -
标准IO流
标准I/O对象:cin,cout,cerr,clogcout流对象cont是console output的缩写,意为在控制台(终端显示器)的输出。强调几点。1) cout不是C++预定义的关键字,它是ostream流类的对象,在iostream中定义。 顾名思义,流是流动的数据,cout流是流向显示器的数据。cout流中的数据是用流插入运算符“<<”顺序加入的。如果有 ...原创 2020-03-19 12:45:16 · 532 阅读 · 0 评论 -
I/O流的概念和流类库的结构
程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。C++输入输出包含以下三个方面的内容: 对系统指定的标准设备的输入和输出。即从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准I/O。 以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入数据,数据输出到磁盘文件。以外存文件为对象的输入输出称为文件的输入输出,简称...原创 2020-03-19 12:41:54 · 661 阅读 · 0 评论 -
标准程序库异常
关于自定义类型的代码看如下:// out_of_range#include "iostream"using namespace std;#include <stdexcept> #include "string"// out_of_rangeclass Teacher{public: Teacher(int age) { if...原创 2020-03-19 10:22:34 · 134 阅读 · 0 评论 -
异常的层次结构(继承在异常中的应用)
异常是类 – 创建自己的异常类 异常派生 异常中的数据:数据成员 按引用传递异常 在异常中使用虚函数 案例:设计一个数组类 MyArray,重载[]操作,数组初始化时,对数组的个数进行有效检查index<0 抛出异常eNegative index = 0 抛出异常 eZero 3)index>1000抛出异常eTooBig ...原创 2020-03-19 09:52:36 · 198 阅读 · 0 评论