STL容器基本功能与分类
STL有7中容器。
分别为:
vector 向量 <vector>(头文件) 随机访问容器、顺序容器
deque 双端队列 <deque> 随机访问容器、顺序容器
list 列表 <list> 可逆容器、顺序容器
set 集合 <set> 可逆容器、关联容器
multiset 多重集合 <set> 可逆容器、关联容器
map 映射 <map> 可逆容器、关联容器
multimap 多重映射 <map> 可逆容器、关联容器
设S表示一种容器类型(如:vector<int>),s1、s2都是S类型的实例,容器都具有如下基本功能:
S s1 容器的默认构造函数,用于构造一个没有任何元素的空容器。
s1 op s2 对两容器之间的元素按字典序进行比较,op表示==、!=、<、<=、>、>=任何一个。
s1.begin() 返回指向s1第一个元素的迭代器。
s1.end() 返回指向s1最后一个元素的下一个位置的迭代器。
s1.empty() 表示s1容器是否为空,返回一个布尔值。
s1.size() 返回s1容器中元素的个数。
s1.swap(s2) 将s1容器和s2容器的内容交换。
与类型为S的容器相关联的迭代器的类型:
S::iterator (与S相关的普通迭代器类型,迭代器指向的元素类型为T)
S::const_iterator (表示与S相关的常迭代器类型,迭代器指向的元素类型为const T,通过这样的迭代器只能读取元素,不能改写元素)
按照容器中元素的组织方式,容器可分为: “顺序容器”(相同类型元素以严格线性形式组织) 和 “关联容器”(可根据一组索引快速提取元素)。
按照与容器所关联的迭代器类型,又有“可逆容器”这一概念。可逆容器又有“随机访问容器”的子概念。
每一个可逆容器都有逆向迭代器:
s1.rbegin() 返回指向容器最后一个元素的逆向迭代器。
s1.rend() 返回容器的第一个元素的前一个位置的逆向迭代器。
逆向迭代器的类型:S::reverse_iterator 和 S::const_reverse_iterator
逆向迭代器的“++”运算 被映射为普通迭代器的“--”,“--”运算 被映射为普通迭代器的“++”。
一个迭代器和它的逆向迭代器可以相互转换。
逆向迭代器类型都有一个构造函数,用来构造一个迭代器的逆向迭代器:
如p1是S::iterator迭代器,那么S::reverse_iterator(p1)将得到p1的逆向迭代器
逆向迭代器有一个成员函数base,用来得到构造了此逆向迭代器的那个迭代器。
如r1是通过S::reverse_iterator(p1)构造的迭代器,那么,r1.base()==p1.
r1.begin()、r1.end()、r1.rbegin()、r1.rend()之间的关系:
s1.rbegin()==S::reverse_iterator(s1.end()), s1.rbegin().base()==s1.end();
s1.rend()==S::reverse_iterator(s1.begin()), s1.rend().base==s1.begin()
随机访问容器提供的迭代器是“随机访问迭代器”,它可以直接通过一个整数来访问容器中的指定元素。
STL容器基本功能与分类的更多相关文章
- Sword STL容器分类介绍
标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.slist是一个单 ...
- STL容器的适用情况
转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...
- 关于STL容器
容器: 概念:如果把数据看做物体,容器就是放置这些物体的器物,因为其内部结构不同,数据摆放的方式不同,取用的方式也不同,我们把他们抽象成不同的模板类,使用时去实例化它 分类: 序列容器.关联容器.容器 ...
- STL 容器的概念
STL 容器的概念 在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要. 经典的数据结构数量有限,但是我们 ...
- C++中STL容器的比较
基本参考 https://blog.csdn.net/qq_14898543/article/details/51381642 容器特性: vector:典型的序列容器,C++标准严格要求次容器的实现 ...
- STL容器的本质
http://blog.sina.com.cn/s/blog_4d3a41f40100eof0.html 最近在学习unordered_map里面的散列函数和相等函数怎么写.学习过程中看到了一个好帖子 ...
- C++ STL 容器之栈的使用
Stack 栈是种先进后出的容器,C++中使用STL容器Stack<T> 完美封装了栈的常用功能. 下面来个demo 学习下使用栈的使用. //引入IO流头文件 #include<i ...
- C++ STL容器总结
1. STL 容器 1. 按种类划分 顺序容器( sequence containers):是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集.顺序性容器中的每个元素均有固定的位 ...
- STL容器底层数据结构的实现
C++ STL 的实现: 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque ...
随机推荐
- Django 2.0 学习(21):Django Session
Django Session Session 与Cookie 1.简介 1.Cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们又需要"保持状态",因 ...
- 【转】VS2012简单的使用感受+插件推荐
转自:http://blog.sina.com.cn/s/blog_58c506600101b34t.html ~PS:后面有博主自己补充的VS2013的哦~ 1.Visual Studio Achi ...
- [CF671E] Organizing a Race
题目大意 有\(n\)个加油站排成一行,编号为\(1\sim n\) ,\(i\)与\(i+1\)间有一条长为\(w_i\)千米的道路. 一辆汽车在经过加油站\(i\)时会得到\(g_i\)升汽油 , ...
- P4051 [JSOI2007]字符加密 解题报告
P4051 [JSOI2007]字符加密 题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不 ...
- Corosync+Pacemaker+crmsh构建Web高可用集群
一.概述: 1.1 AIS和OpenAIS简介 AIS应用接口规范,是用来定义应用程序接口(API)的开放性规范的集合,这些应用程序作为中间件为应用服务提供一种开放.高移植性的程序接口.是在实现高可用 ...
- FourAndSix: 2.01靶机入侵
0x01 前言 FourAndSix2是易受攻击的一个靶机,主要任务是通过入侵进入到目标靶机系统然后提权,并在root目录中并读取flag.tx信息 FourAndSix2.镜像下载地址: htt ...
- docker虚拟机动态扩展内存
需求:将一台docker虚拟机的内存从6G扩展到8G. 关于资源限制,docker使用的是cgroup,这里就不细说原理了,只记录一下操作方法. 1.先找到容器ID # docker ps 2.进入对 ...
- C++中基于成员函数是否是const重载成员函数
C++pimer中文版第四版 378页 基于const的重载 如果我们要在一个类的成员函数中定义两个函数签名完全一样的成员函数,比如display,那么可以基于是否是const成员函数来重载.比如: ...
- K8S调度之pod亲和性
目录 Pod Affinity Pod亲和性调度 pod互斥性调度 Pod Affinity 通过<K8S调度之节点亲和性>,我们知道怎么在调度的时候让pod灵活的选择node,但有些时候 ...
- CoreDNS配置etcd作为后端
配置说明 官方有使用etcd插件的详细说明,地址如下:https://coredns.io/plugins/etcd/ 需要特别说明的是,目前coredns只支持etcd v2版本的api 这里直接摘 ...