9-2 容器库概述

9.2.0 容器库的操作层次

容器库在操作上形成了一种层次

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

在本节,我们将介绍所有容器(顺序,关联,无序)都适用的操作,在本章的其他章节介绍顺序容器的其他操作,并在第11章介绍关联容器的操作

image-20220221133353458

image-20220221133405299

9.2.1 迭代器

迭代器支持的所有操作#

image-20220221133537760

迭代器支持的算术操作#

image-20220221133555465

迭代器范围#

容器中有两个特殊的迭代器.begin().end()分别指向容器的第一个元素和容器的尾后元素

,二者构成了一个左闭右开区间

  • 如果begin 与end相等,则范围为空
  • 如果 begin 与 end不等,则范围至少包含一个元素,且 begin指向该范围中的第一个元素
  • 我们可以对begin递增若干次,使得begin==end

9.2.2 容器类型成员

常见容器类型成员#

类型成员 含义
size_type unsigned表示容器大小
iterator 迭代器
const_iterator 常量迭代器
reverse_iterator 反向迭代器
value_type 容器元素的类型
reference 元素类型的引用
const_referance 元素类型的常量引用

这些类型成员在泛型编程中很有用

在使用是必须显示标注其类名

//iter是通过list<string>定义的一个迭代器类型
list<string>::iterator iter;
//count是通过vector<int>定义的一个difference_type类型
vector<int>::difference_type count;

9.2.3 begin和end成员

常见用途是形成一个包含所有元素的迭代器范围

//常见的遍历容器的模板
for(auto it = v.begin(); it != v.end(); ++it){
    cout<<*it<<endl;
}

auto 指定的类型是 vector:: iterator

当不需要修改元素时,使用cbegincend

9.2.4 容器定义和初始化

容器的初始化#

image-20220221135013683

将一个容器初始化为另一个容器的拷贝#

  • 类型必须匹配: 容器类型; 容器元素类型
  • 如果是用含迭代器的构造函数: 保证元素类型可以相互转换

image-20220221135344076

列表初始化#

显示地指出容器中包含哪些元素,同时指定了容器的大小

vector<int> = {1,2,3};
list<string> s = {"a", "b", "c"};

与顺序容器大小相关的构造函数#

image-20220221171041522

如果容器元素没有默认构造函数,那么必须显式地提供初始值

只有顺序容器的构造函数才接受大小参数, 关联容器不支持

9.2.5 赋值和swap

左右的容器的类型以及元素类型必须相同。

image-20220221172857836

使用assign(仅顺序容器)#

将参数所指定的元素替换掉左边容器中的元素

image-20220221173052494

由于旧元素会被替换,所以传递给assign的迭代器不能指向调用assign的容器

assign 的第二个版本接受一个整型值和一个元素值。它用指定数目且具有相同给定值的元素替换容中原有的元素,

image-20220221173311699

使用swap#

交换两个相同类型容器的内容。

vector<string> svec1(10); //10个元素
vector<string> svec2(24); //24个元素
swap(svec1, svec2);

除了array外,swap对任何元素进行拷贝删除和插入,只是改变两个容器的内部结构,因此能在常数时间完成

除了string外,swap不会导致指向容器的迭代器、指针和引用失效。

9.2.6 容器大小操作

成员 含义
size 元素的数目
empty() 容器是否为空
max_size 返回一个>=该容器所能容纳的最大元素的值

9.2.7 关系运算符

  • 所有容器都支持=!=
  • 除了无序容器,所有元素都支持>,<,>=,<=
  • 比较两个容器时实际上是对容器内的元素进行逐对比较
posted @   咪啪魔女  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示