IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++中常用的顺序容器和关联容器的操作总结 -> 正文阅读

[C++知识库]c++中常用的顺序容器和关联容器的操作总结



1.所有容器都支持的操作

(参考c++ primer 9:顺序容器)

1.1类型别名

操作说明
iterator此容器类型的迭代器类型
const_iterator可以读取元素,但不能修改元素的迭代器类型
size_type无符号整数类型,足够保存此种容器类型最大可能容器的大小
different_type带符号整数类型,足够保存两个迭代器之间的距离
value_type元素类型
reference元素的左值类型;与value_type&含义相同
const_reference元素的const左值类型(即,const value_type&)

1.2构造函数

操作说明
C c;默认构造函数,构造空容器(array,参见第301页)
C c1(c2); C c1 = c2;构造c2的拷贝c1(两种方式等效)
C c(b,e);构造c,将迭代器b和e指定的范围内的元素拷贝到c(array不支持)
C c{a,b,c…}; C c = {a,b,c…};列表初始化c(两种方式等效)

1.3赋值与swap

warning:赋值相关运算会导致指向左边容器内部的迭代器、引用和指针失效。而swap操作将容器内容交换不会导致指向容器的迭代器、引用和指针失效(容器类型为array和string的情况除外)

操作说明
c1=c2将c1中的元素替换为c2中元素
c1={a,b,c,…}将c1中的元素替换为列表中元素(不适用于array)
a.swap(b)交换a和b的元素
swap(a,b)与a.swap(b)等价

1.4大小

操作说明
c.size()c中元素的数目(不支持forward_list)
c.max_size()c可保存的最大元素数目
c.empty()若c中储存了元素,返回false,否则返回true

1.5添加/删除元素(不适用于array)

注:在不同容器中,这些操作的接口都不同

操作说明
c.insert(args)将args中的元素拷贝进c
c.emplace(inits)使用inits构造c中的一个元素
c.erase(args)删除args指定的元素
c.clear()删除c中所有元素,返回void

1.6关系运算符

操作说明
==, !=所有容器都支持相等(不等)运算符
<, <=, >, >=关系运算符(无序关联容器不支持)

1.7获取迭代器

操作说明
c.begin(), c.end()返回指向c的首元素和尾元素之后位置的迭代器
c.cbegin(), c.cend()返回const_iterator

1.8反向容器的额外成员(不支持forward_list)

操作说明
reverse_iterator按逆序寻址元素的迭代器
const_reverse_iterator不能修改元素的逆序迭代器
c.rbegin(), c.rend()返回指向c的尾元素和首元素之前位置的迭代器
c.crbegin(), c.crend()返回const_reverse_iterator

2.顺序容器

(参考c++ primer 9:顺序容器)
顺序容器类型:vector、deque、 list、 forward_list、array、 string

2.1顺序容器的构造函数补充

操作说明
C seq(n)默认值初始化 seq包含n个元素,这些元素进行了值初始化;此构造函数是explicit的(参见7.5.4节,第265页)。(string不适用)
C seq(n,t)seq包含n个初始化值为t的元素

2.2顺序容器的赋值操作补充assign(不支持array)

操作说明
seq.assign(b,e)将seq中的元素替换为迭代器b和e所表示的范围中的元素。迭代器b和e不能指向seq中的元素
seq.assign(il)将seq中的元素替换为初始化列表il中的元素
seq.assign(n,t)将seq中的元素替换为n个值为t的元素

2.3向顺序容器添加元素的操作(不支持array)

注:
forward_list 有自己专有版本的insert和emplace; 参见9.3.4节(第312页)。
forward_list 不支持push_back和emplace_back。
vector 和 string 不支持push_front 和emplace_front。

warning:向一个vector、string或deque插入元素会使所有指向容器的迭代器、引用和指针失效

操作说明
c.push_back(t) c.emplace_back(args)在c的尾部创建一个值为t或由args创建的元素。返回void
c.push_front(t) c.emplace_front(args)在c的头部创建一个值为t或由args创建的元素。返回void
c.insert(p,t) c.emplace(p,args)在迭代器p指向的元素之前创建一个值为t或由args创建的元素。返回指向新添加的元素的迭代器
c.insert(p,n,t)在迭代器p指向的元素之前插入n个值为t的元素。返回指向新添加的第一个元素的迭代器;若n为0,则返回p
c.insert(p,b,e)将迭代器b和e指定的范围内的元素插入到迭代器p指向的元素之前。b和e不能指向c中的元素。返回指向新添加的第一个元素的迭代器;若范围为空,则返回p
c.insert(p,il)il是一个花括号包围的元素值列表。将这些给定值插入到迭代器p指向的元素之前。返回指向新添加的第一个元素的迭代器;若列表为空,则返回p

2.4在顺序容器中访问元素的操作

注:at和下表操作只适用于string、vector、deque和array
back不适用于forward_list。

操作说明
c.back()返回c中尾元素的引用。若c为空,函数行为未定义
c.front()返回c中首元素的引用。若c为空,函数行为未定义
c[n]返回c中下标为n的元素的引用,n是一个无符号整数。若n>=c.size(),则函数行为未定义
c.at(n)返回下标为n的元素的引用。如果下标越界,则抛出一out_of_range异常

2.5顺序容器的删除操作(不支持array)

注:forward_list 有特殊版本的erase,参见9.3.4节(第312页)。
forward_list不支持pop_back;vector和 string 不支持pop_front。

warning:删除deque中除首尾位置之外的任何元素都会使所有迭代器、引用和指针失效。指向vector或string中删除点之后的迭代器、引用和指针都会失效。
删除元素的成员函数并不会检查其参数。在删除元素之前, 程序员必须确保它(们)是存在的。

操作说明
c.pop_back()删除c中尾元素。若c为空,则函数行为未定义。函数返回void
c.pop_front()删除c中首元素。若c为空,则函数行为未定义。函数返回void
c.erase( p )删除迭代器p所指定的元素,返回一个指向被删元素之后的迭代器,若p指向尾元素,则返回尾后(off-the-end)迭代器。若p是尾后迭代器,则函数行为未定义
c.erase(b,e)删除迭代器b和e所指定范围内的元素。返回一个指向最后一个被删元素之后元素的迭代器,若e本身就是尾后迭代器,则函数也返回尾后迭代器
c.clear()删除c中所有元素。返回void

2.6forward_list的插入和删除操作

操作说明
lst.before_begin() lst.cbefore_begin()返回首前迭代器,不能解引用
lst.insert_after(p,t)返回一个指向插入元素的迭代器
lst.insert_after(p,n,t)返回一个指向最后一个插入元素的迭代器
lst.insert_after(p,b,e)返回一个指向最后一个插入元素的迭代器
lst.insert_after(p.il)返回一个指向最后一个插入元素的迭代器
emplace_after(p,args)
lst.earse_after( p ) lst.earse_after(b,e)返回一个指向被删元素之后元素的迭代器

2.7顺序容器的大小以及管理操作(略)

2.8额外的string操作(持更)

2.8.1构造string的方法

2.8.2子字符串操作

2.8.3修改string的操作

2.8.4string搜索操作

2.8.5compare操作

2.8.6string和数值之间的转换

2.9容器适配器

注:除了顺序容器外,标准库还定义了三个顺序容器适配器:stack、queue和priority_queue。

2.9.1所有容器适配器都支持的操作和类型

操作说明
size_type一种类型,足以保存当前类型的最大对象的大小
value_type元素类型
container_type实现适配器的底层容器类型
A a;
A a?;
关系运算符==、!=、<、<=、>和>=
a.empty()
a.size()
swap(a,b)
a.swap(b)

2.9.2未列出的栈操作

注:栈stack默认基于deque实现,也可以在list或vector之上实现。

操作说明
s.pop()删除栈顶元素,但不返回该元素值
s.push(item) s.emplace(args)创建一个新的元素压入栈顶,该元素通过拷贝或移动item而来,或者由args构造
s.top()返回栈顶元素,但不将元素弹出栈

2.9.3未列出的queue和priority_queue操作

注:queue默认基于deque实现,priority_queue默认基于vector实现。
queue也可以用list或vector实现,priority_queue也可以用deque实现。

操作说明
q.pop()返回queue的首元素或priority_queue的最高优先级的元素,但不返回此元素
q.front() q.back()返回首元素或尾元素,但不删除此元素(只适用于queue)
q.top()返回最高优先级元素,但不删除该元素(只适用于priority_queue)
q.push(item) q.emplace(args)在queue末尾或priority_queue中恰当的位置创建一个元素,其值为item,或者由args构造

3.关联容器

(参考c++ primer 11:关联容器)
map、set、multimap、multiset、unordered_map、unordered_set、unordered_multimap、unordered_multiset

3.1关联容器额外的类型别名

操作说明
key_type此容器类型的关键字类型
mapped_type每个关键字关联的类型;只适用于map
value_type对于set,与key_type相同 对于map,为pair<const_key_type, mapped_type>

3.2关联容器添加删除操作

操作说明
c.insert(v)v是value_type类型的对象;args用来构造一个元素
c.emplace(args)函数返回一个pair,包含一个迭代器,指向具有指定关键字的元素,还有一个bool值
c.insert(b,e)
c.insert(il)
c.insert(p,v)返回一个迭代器
c.emplace(p,args)返回一个迭代器
c.erase(k)
c.erase§
c.erase(b,e)

3.3关联容器中的查找操作

注:lower_bound和upper_bound不适用于无序容器。
下标和at操作只适用于非const的map和unordered_map。

操作说明
c.find(k)返回迭代器
c.count(k)返回int
c.lower_bound(k)返回一个迭代器,指向第一个关键字不小于k的元素
c.upper_bound(k)返回一个迭代器,指向第一个关键字大于k的元素
c.equal_range(k)返回一个迭代器pair,表示关键字等于k的元素的范围。若k不存在,pair的两个成员均等于c.end()

3.4无序容器管理操作(略)

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:32:07  更:2021-07-23 10:34:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/29 1:44:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码