
C++之STL
文章平均质量分 69
东南亚季风
很菜的学生一枚
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
STL_优先队列
一、简介优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新定义比较规则。优先级队列可以用向量(vector)或双向队列(deque)来实现priority_queue<vector<int>, less<int> > pq1; // 使用递增less&l原创 2021-02-06 17:50:40 · 133 阅读 · 0 评论 -
STL_综合案例
学校演讲比赛1)某市举行一场演讲比赛,共有24个人参加,按参加顺序设置参赛号。比赛共三轮,前两轮为淘汰赛,第三轮为决赛。2)比赛方式:分组比赛第一轮分为4个小组,根据参赛号顺序依次划分,比如100-105为一组,106-111为第二组,依次类推,每组6个人,每人分别按参赛号顺序演讲。当小组演讲完后,淘汰组内排名最后的三个选手,然后继续下一个小组的比赛。第二轮分为2个小组,每组6人,每个人分别按参赛号顺序演讲。当小组完后,淘汰组内排名最后的三个选手,然后继续下一个小组的比赛。第三轮只剩下6个人,本原创 2021-01-28 15:39:50 · 164 阅读 · 0 评论 -
STL_函数对象、谓词、预定义函数对象、函数适配器
一、函数对象重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象可以像函数那样调用。注意:函数对象(仿函数)是一个类,不是一个函数。函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。分类:假定某个类有一个重载的operator(),而且重载的operator()要求获取一个参数,我们就将这个类称为“一元仿函数”(unary functor);相反,如果重载原创 2021-01-27 18:35:12 · 215 阅读 · 0 评论 -
STL_算法基础
一、算法概述算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。<algorithm>是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、反转、排序、合并等等。<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。<functional>中则定义了一些模板类,用以声明函数对象。STL提原创 2021-01-27 18:33:03 · 231 阅读 · 0 评论 -
STL_常用的算法
一、常用的查找算法adjacent_find()adjacent_find(iterator beg, iterator end, _callback);在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器。 vector<int> vecInt; vecInt.push_back(1); vecInt.push_back(2); vecInt.push_back(2); vecInt.push_back(4);原创 2021-01-27 18:31:33 · 164 阅读 · 0 评论 -
STL_map和multimap容器
一、map/multimap的简介map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。map中key值是唯一的**。集合中的元素按一定的顺序**排列。元素插入过程是按排序规则插入,所以不能指定插入位置。map的具体实现采用红黑树变体的平衡二叉树的数据结构,在插入操作和删除操作上比vector快。map可以直接存取key所对应的value,支持[]操作符,如map[key]=value。multimap与map的区别:map支持唯一键值,原创 2021-01-26 18:52:13 · 153 阅读 · 0 评论 -
STL_员工分组案例
公司今天招聘了 5 个员工, 5 名员工进入公司之后,需要指派员工在那个部门工作人员信息有: 姓名 年龄 电话 工资等组成通过 Multimap 进行信息的插入 保存 显示分部门显示员工信息 显示全部员工信息//main.cpp文件#include "worker.h"#include "manager.h"int main(){ manager m; m.show(); return 0;}//work.h文件#pragma once#include <stri原创 2021-01-26 18:50:52 · 225 阅读 · 0 评论 -
STL_set和multiset容器
一、set/multiset的简介set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树。在插入操作和删除操作上比vector快。set不可以直接存取元素。(不可以使用at.(pos)与[]操作符)。multiset与set的区别:set支持唯一键值,每个元素值只能出现一次;multiset中同一值可以出现多次。不可以直接修改set或multiset容器中的元原创 2021-01-25 17:57:05 · 147 阅读 · 0 评论 -
STL_list容器
一、List简介链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相较于vector的连续线性空间,list的好处是每次插入或者删除一个元素,就是配置或者释放一个元素的空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素的移除,list永远是常数时原创 2021-01-25 17:53:03 · 120 阅读 · 0 评论 -
STL_queue容器
一、queue简介queue所有元素的进出都必须符合”先进先出”的条件,只有queue的顶端元素,才有机会被外界取用。queue不提供遍历功能,也不提供迭代器。queue是简单地装饰deque容器而成为另外的一种容器。#include <queue>二、queue对象的默认构造queue采用模板类实现,queue对象的默认构造形式:queue<T> queT;queue<int> queInt; //一个存放int的queue容器。queue&l原创 2021-01-25 17:44:32 · 131 阅读 · 0 评论 -
STL_stack容器
一、stack简介stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口。stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何其他方法可以存取stack的其他元素。换言之,stack不允许有遍历行为。有元素推入栈的操作称为:push将元素推出stack的操作称为popstack是简单地装饰deque容器而成为另外的一种容器。#include<stack>二、stack对象的默认构造stack采用模板类实现,原创 2021-01-25 17:43:37 · 178 阅读 · 0 评论 -
STL_打分案例
评委打分案例(sort 算法排序)创建 5 个选手(姓名,得分) , 10 个评委对 5 个选手进行打分得分规则:去除最高分,去除最低分,取出平均分按得分对 5 名选手进行排名#define _CRT_SECURE_NO_WARNINGS#define PLAYER_NUMBER 5#include<iostream>#include<string>#include<vector>#include<deque>#include<a原创 2021-01-24 16:55:20 · 146 阅读 · 0 评论 -
STL_deque容器
一、deque简介deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的。deque在接口上和vector非常相似,在许多操作的地方可以直接替换。deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法)。**deque头部和尾部添加或移除元素都非常快速。**但是在中部安插元素或移除元素比较费时。#include <deque>原理:Deque容器是连续的空间,至少逻辑上看原创 2021-01-24 16:43:18 · 145 阅读 · 0 评论 -
STL_迭代器
一、迭代器基本原理迭代器是一个“可遍历STL容器内全部或部分元素”的对象。迭代器指出容器中的一个特定位置。迭代器就如同一个指针。迭代器提供对一个容器中的对象的访问方法,并且可以定义了容器中对象的范围。迭代器的类别:输入迭代器:也有叫法称之为“只读迭代器”,它从容器中读取元素,只能一次读入一个元素向前移动,只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列。输出迭代器:也有叫法称之为“只写迭代器”,它往容器中写入元素,只能一次写入一个元素向前移动,只支持一遍算法,同一个输出迭代器不能两遍遍历原创 2021-01-24 16:39:05 · 297 阅读 · 0 评论 -
STL_vector容器
一、Vector容器简介vector是将元素置于一个动态数组中加以管理的容器。vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法)。vector尾部添加或移除元素非常快速,但是在中部或头部插入元素或移除元素比较费时。二、vector对象的默认构造vector采用模板类实现,vector对象的默认构造形式:vector<T> vecT;vector<int> vecInt; //一个存放int的vector容器。vector<f原创 2021-01-23 17:45:18 · 165 阅读 · 0 评论 -
STL_string容器
一、string概念string是STL的字符串类型,通常用来表示字符串。而在使用string之前,字符串通常是用char*表示的。string与char*都可以用来表示字符串,那么二者有什么区别。string和char*的比较:string是一个类, char*是一个指向字符的指针。 string封装了char*,管理这个字符串,是一个char*型的容器。string不用考虑内存释放和越界。 string管理char*所分配的内存。每一次string的复制,取值都由转载 2021-01-23 17:39:18 · 115 阅读 · 0 评论 -
STL简介
一、基本概念STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL 就位于各个 C++ 的原创 2021-01-23 17:30:29 · 1540 阅读 · 0 评论 -
类模板(C++)
一、简介类模板和函数模板的定义及使用类似。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同。类模板用于实现类所需数据的类型参数化类模板在表示如数组、表、图等数据结构显得特别重要,这些数据结构的表示和算法不受所包含的数据类型的影响。二、语法C++ 中类模板的写法如下:template <类型参数表>class 类模板名{ 成员函数和成员变量};类型参数表的写法如下:class类塑参数1, class类型参数2, ...类模板中的成员函数放到类模板定义外面写原创 2020-12-30 16:39:20 · 3874 阅读 · 1 评论 -
函数模板(C++ 01)
在C++中,数据的类型也可以通过参数来传递,在函数定义时可以不指明具体的数据类型,当发生函数调用时,编译器可以根据传入的实参自动推断数据类型。这就是类型的参数化。 函数模板是一种特殊的函数,可以使用不同的类型进行调用,对于功能相同的函数,不需要重复编写代码,并且函数模板与普通函数看起来很类似,区别就是类型可以被参数化。模板函数的语法:template <typename 类型参数1 , typename 类型参数2 , ...> 返回值类型 函数名(形参列表){ //在原创 2020-12-28 00:01:15 · 140 阅读 · 0 评论 -
成员模板
一、简介任意类(模板或非模板)可以拥有本身为类模板或函数模板的成员,这种成员称为成员函数模板。STL中为什么要运用这种技术呢?考虑 vector 容器的 assign 成员函数,它可以接受两个迭代器为容器赋值,而这两个迭代器可以是 list 的迭代器、deque的迭代器、甚至是两个原生指针。也就是说成员函数 assign 的形参是不确定的。解决的方法是使用模板形参来表示迭代器形参的类型。二、语法C++ 中成员模板的写法如下://在类内部template <class I>返回类型 函原创 2021-02-27 19:43:42 · 304 阅读 · 0 评论