首页 > 其他分享 >93.容器库概述

93.容器库概述

时间:2023-05-11 14:48:45浏览次数:58  
标签:容器 const 迭代 元素 vector 概述 类型 93

容器类型上的操作形成了一种层次:

●某些操作是所有容器类型都提供的(参见表9.2,第295页)。
●另外一些操作仅针对顺序容器(参见表9.3,第299页)、关联容器(参见表11.7,第388页)或无序容器(参见表11.8,第395页)。
●还有一些操作只适用于一小部分容器。

  一般来说,每个容器都定义在一个头文件中,文件名与类型名相同。即,deque定义在头文件deque中,list定义在头文件list中,以此类推。容器均定义为模板类(参见3.3节,第86页)。例如对vector,我们必须提供额外信息来生成特定的容器类型。对大多数,但不是所有容器,我们还需要额外提供元素类型信息:

list<Sales data>//保存Sales_data对象的巨st 
deque<double>//保存double的deque

对容器可以保存的元素类型的限制

  顺序容器几乎可以保存任意类型的元素。特别是,我们可以定义一个容器,其元素的类型是另一个容器。这种容器的定义与任何其他容器类型完全一样:在尖括号中指定元素类型(此种情况下,是另一种容器类型):

vector<vector<string>> lines; //vector的vector

此处lines是一个vector,其元素类型是string的vector。

注意:较旧的编译器可能需要在两个尖括号之间键入空格,例如,vector<vector<string> >。

  虽然我们可以在容器中保存几乎任何类型,但某些容器操作对元素类型有其自己的特殊要求。我们可以为不支持特定操作需求的类型定义容器,但这种情况下就只能使用那些没有特殊要求的容器操作了。
  例如,顺序容器构造函数的一个版本接受容器大小参数(参见3.3.1节,第88页),它使用了元素类型的默认构造函数。但某些类没有默认构造函数。我们可以定义一个保存这种类型对象的容器,但我们在构造这种容器时不能只传递给它一个元素数目参数:

//假定noDefault是一个没有默认构造函数的类型
vector<noDefault> v1(10, init);//正确:提供了元素初始化器 
vector<noDefault> v2(10);//错误:必须提供一个元素初始化器

当后面介绍容器操作时,我们还会注意到每个容器操作对元素类型的其他限制。

表9.2:容器操作
类型别名
iterator 此容器类型的迭代器类型
const_iterator 可以读取元素,但不能修改元素的迭代器类型
size_type 无符号整数类型,足够保存此种容器类型最大可能容器的大小
difference_type 带符号整数类型,足够保存两个迭代器之间的距离
value_type 元素类型
reference 元素的左值类型:与value_type&含义相同
const_reference 元素的const左值类型(即,constvalue_type&)
构造函数
Cc; 默认构造函数,构造空容器(array,参见第301页)
C c1{c2}; 构造c2的拷贝c1
C c(b, e); 构造C,将迭代器b和e指定的范围内的元素拷贝到c(array不支持)
C c{a, b, c...}; 列表初始化c
const_reference 元素的const左值类型(即,const value_type&)
构造函数swap
c1 = c2 将cl中的元素替换为c2中元素
c1 = {a, b, c...}; 将c1中的元素替换为列表中元素(不适用于array)
a.swap(b) 交换a和b的元素
swap(a, b) 与a.swap(b)等价
大小
c.size() c中元素的数目(不支持forward_list)
c.max_size() c可保存的最大元素数目
c.empty() 若c中存储了元素,返回false,否则返回true
添加/删除元素(不适用于array)
注:在不同容器中,这些操作的接口都不同
c.insert(args) 将args中的元素拷贝进c
c.emplace(inits) 使用inits构造c中的一个元素
c.erase(args) 删除args指定的元素
c.clear() 删除c中的所有元素,返回void
关系运算符
==, != 所有容器都支持相等(不等)运算符
<, <=, >, >= 关系运算符(无序关联容器不支持)
获取迭代器
c.begin(), c.end() 返回指向c的首元素和尾元素之后位置的迭代器
c.cbegin(), c.cend() 返回const_iterator
反向容器的额外成员(不支持forward_list)
reverse_iterator 按逆序寻址元素的迭代器
const_reverse_iterator 不能修改元素的逆序迭代器
c.rbegin(), c.rend() 返回指向c的尾元素和首元素之前位置的迭代器
c.crbegin(), c.crend() 返回const_reverse_iterator

参考资料:

C++ Primer

标签:容器,const,迭代,元素,vector,概述,类型,93
From: https://www.cnblogs.com/codemagiciant/p/17390932.html

相关文章

  • Nginx容器挂载日志卷的日志切割: logrotate
    logrotate是一个日志文件管理工具,用来把旧文件轮转、压缩、删除,并且创建新的日志文件.1).功能:配合crontab控制启动,按配置定义的分割时间和保留分割文件数量来控制日志生成和删除.2).语法:logrotate[参数]<路径/配置文件>-d,--debug调试模式,输出调度结果,并......
  • 92.顺序容器概述
      一个容器就是一些特定类型对象的集合。顺序容器(sequentialcontainer)为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。可以分为有序和无序关联容器。  标准库还提供了三种容器适配器,分别为容器操作定义了不同......
  • 1193. 每月交易 I
    【题目】Table:Transactions+---------------+---------+|ColumnName  |Type   |+---------------+---------+|id           |int    ||country      |varchar||state        |enum   ||amount       |int  ......
  • vector容器(下)
    五、vector的插入和删除1、功能描述:对vector容器进行插入、删除操作;2、函数原型:(1)push_back(ele);//尾部插入元素ele(2)pop_back(ele); //删除最后一个元素(3)insert(const_iteratorops,ele);//迭代器指向位置pos插入元素ele(4)insert(const_iteratorpos,intcount,ele);//迭代器指向位置......
  • Kubernetes概述 (一篇教你认识k8s)
    一、Kubernetes概述 1.k8s是什么K8S的全称为Kubernetes(K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。作用:用于自动部署、扩展和管理“容器化(containerized)应用程序"的开源系统。可以理解成K8S是负责自动化运维管理多个容器化程序(比如Docker)的集群,是一......
  • IOC容器-Autofac
    Autofac是第三方IOC容器,是当前最流行的IOC容器。1.容器创建对象//创建一个容器建造者ContainerBuildercontainerBuilder=newContainerBuilder();//注册普通类containerBuilder.RegisterType<Honer>();//build一下,得到一个容器IContainercontainer=containerBuild......
  • 每日打卡c++中vector容器使用
    首先头文件#include<vector>for_each一种算法需要头文件#include<algorithm>标准算法头文件vector<int>::iterator迭代器,可以当指针用。基本格式vector<数据类型>名称;数据类型可以是类。例子#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;cla......
  • 【C++容器基础】
    容器汇总: 向量(vector): 队列(deque):列表(list): 数组(array): 字符串(string): 映射(map):无序 集合(set):无序不重复 ......
  • 关联映射概述
    关联映射关系在关系型数据库中,表与表之间存在着三种关联映射关系,分别为一对一关系、一对多关系和多对多关系。   一对一关系:一个数据表中的一条记录最多可以和另一个数据表中的一条记录相关。例如,现实生活中学生与校园卡就属于一对一的关系,一个学生只能拥有一张校园卡,......
  • MySQL(二十)锁(一)锁的概述与S、X锁
    MySQL(二十)锁(一)锁概述、S锁和X锁1概述锁是计算机协调多个线程或进程并发访问某一资源的机制。​ 在程序开发过程中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是一些敏感的数据(如金额、订单等),就需要保证这个数据在任何时刻都最多只有一个线程在访问,以保证......