首页 > 编程语言 >C++序列式容器

C++序列式容器

时间:2023-09-19 10:35:48浏览次数:37  
标签:返回 容器 函数 元素 list C++ 序列

需要注意的是,序列容器只是一类容器的统称,并不指具体的某个容器,序列容器大致包含以下几类容器:

    • array<T,N>(数组容器):表示可以存储 N 个 T 类型的元素,是 C++ 本身提供的一种容器。此类容器一旦建立,其长度就是固定不变的,这意味着不能增加或删除元素,只能改变某个元素的值;
    • vector<T>(向量容器):用来存放 T 类型的元素,是一个长度可变的序列容器,即在存储空间不足时,会自动申请更多的内存。使用此容器,在尾部增加或删除元素的效率最高(时间复杂度为 O(1) 常数阶),在其它位置插入或删除元素效率较差(时间复杂度为 O(n) 线性阶,其中 n 为容器中元素的个数);
    • deque<T>(双端队列容器):和 vector 非常相似,区别在于使用该容器不仅尾部插入和删除元素高效,在头部插入或删除元素也同样高效,时间复杂度都是 O(1) 常数阶,但是在容器中某一位置处插入或删除元素,时间复杂度为 O(n) 线性阶;
    • list<T>(链表容器):是一个长度可变的、由 T 类型元素组成的序列,它以双向链表的形式组织元素,在这个序列的任何地方都可以高效地增加或删除元素(时间复杂度都为常数阶 O(1)),但访问容器中任意元素的速度要比前三种容器慢,这是因为 list<T> 必须从第一个元素或最后一个元素开始访问,需要沿着链表移动,直到到达想要的元素。
    • forward_list<T>(正向链表容器):和 list 容器非常类似,只不过它以单链表的形式组织元素,它内部的元素只能从第一个元素开始访问,是一类比链表容器快、更节省内存的容器。

 

容器中常见的函数成员

序列容器包含一些相同的成员函数,它们的功能也相同,本教程会在某个容器的上下文中详细介绍下面的每个函数,但对于每种类型的容器不会重复介绍它们的细节。

表 2 展示了 array、vector 和 deque 容器的函数成员,它们中至少有两个容器实现了同样的函数成员。

表 2 array、vector 和 deque 容器的函数成员
函数成员函数功能array<T,N>vector<T>deque<T>
begin() 返回指向容器中第一个元素的迭代器。
end() 返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。
rbegin() 返回指向最后一个元素的迭代器。
rend() 返回指向第一个元素所在位置前一个位置的迭代器。
cbegin() 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
cend() 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crbegin() 和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crend() 和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
assign() 用新元素替换原有内容。 -
operator=() 复制同类型容器的元素,或者用初始化列表替换现有内容。
size() 返回实际元素个数。
max_size() 返回元素个数的最大值。这通常是一个很大的值,一般是 232-1,所以我们很少会用到这个函数。
capacity() 返回当前容量。 - -
empty() 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。
resize() 改变实际元素的个数。 -
shrink _to_fit() 将内存减少到等于当前元素实际所使用的大小。 -
front() 返回第一个元素的引用。
back() 返回最后一个元素的引用。
operator[]() 使用索引访问元素。
at() 使用经过边界检査的索引访问元素。
push_back() 在序列的尾部添加一个元素。 -
insert() 在指定的位置插入一个或多个元素。 -
emplace() 在指定的位置直接生成一个元素。 -
emplace_back() 在序列尾部生成一个元素。 -
pop_back() 移出序列尾部的元素。 -
erase() 移出一个元素或一段元素。 -
clear() 移出所有的元素,容器大小变为 0。 -
swap() 交换两个容器的所有元素。
data() 返回指向容器中第一个元素的指针 -

列表中 - 表明对应的容器并没有定义这个函数。

list 和 forward_list 容器彼此非常相似,forward_list 中包含了 list 的大部分成员函数,而未包含那些需要反向遍历的函数。表 3 展示了 list 和 forward_list 的函数成员。

 

表 3 list 和 forward_list 的函数成员
函数成员函数功能list<T>forward_list<T>
begin() 返回指向容器中第一个元素的迭代器。
end() 返回指向容器最后一个元素所在位置后一个位置的迭代器。
rbegin() 返回指向最后一个元素的迭代器。 -
rend() 返回指向第一个元素所在位置前一个位置的迭代器。 -
cbegin() 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
before_begin() 返回指向第一个元素前一个位置的迭代器。 -
cbefore_begin() 和 before_begin() 功能相同,只不过在其基础上,增加了 const 属性,即不能用该指针修改元素的值。 -
cend() 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crbegin() 和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。 -
crend() 和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。 -
assign() 用新元素替换原有内容。
operator=() 复制同类型容器的元素,或者用初始化列表替换现有内容。
size() 返回实际元素个数。 -
max_size() 返回元素个数的最大值,这通常是一个很大的值,一般是 232-1,所以我们很少会用到这个函数。
resize() 改变实际元素的个数。
empty() 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。
front() 返回容器中第一个元素的引用。
back() 返回容器中最后一个元素的引用。 -
push_back() 在序列的尾部添加一个元素。 -
push_front() 在序列的起始位置添加一个元素。
emplace() 在指定位置直接生成一个元素。 -
emplace_after() 在指定位置的后面直接生成一个元素。 -
emplace_back() 在序列尾部生成一个元素。 -
cmplacc_front() 在序列的起始位生成一个元索。
insert() 在指定的位置插入一个或多个元素。 -
insert_after() 在指定位置的后面插入一个或多个元素。 -
pop_back() 移除序列尾部的元素。 -
pop_front() 移除序列头部的元素。
reverse() 反转容器中某一段的元素。
erase() 移除指定位置的一个元素或一段元素。 -
erase_after() 移除指定位置后面的一个元素或一段元素。 -
remove() 移除所有和参数匹配的元素。
remove_if() 移除满足一元函数条件的所有元素。
unique() 移除所有连续重复的元素。
clear() 移除所有的元素,容器大小变为 0。
swap() 交换两个容器的所有元素。
sort() 对元素进行排序。
merge() 合并两个有序容器。
splice() 移动指定位置前面的所有元素到另一个同类型的 list 中。 -
splice_after() 移动指定位置后面的所有元素到另一个同类型的 list 中。 -

 

标签:返回,容器,函数,元素,list,C++,序列
From: https://www.cnblogs.com/youdao67/p/17713941.html

相关文章

  • C++匿名对象生存期
    classSome{intn;public:Some(ints){n=s;}~Some(){cout<<"destroy\n";}intret(){returnn;}};intmain(intargc,char*argv[]){cout<<Some(111).ret()<<"\n";cout<<"wait......
  • 时间序列的重采样和pandas的resample方法介绍
    重采样是时间序列分析中处理时序数据的一项基本技术。它是关于将时间序列数据从一个频率转换到另一个频率,它可以更改数据的时间间隔,通过上采样增加粒度,或通过下采样减少粒度。在本文中,我们将深入研究Pandas中重新采样的关键问题。为什么重采样很重要?时间序列数据到达时通常带有......
  • 个人项目——C++实现论文查重(简易版)
    本次项目GitHub地址:https://github.com/Focuspresent/Paper_Review这个作业属于哪个课程https://edu.cnblogs.com/campus/jmu/ComputerScience21这个作业的要求https://edu.cnblogs.com/campus/jmu/ComputerScience21/homework/13034这个作业的目标完成一次编程练......
  • C++系列十:日常学习-Lambda表达式
    目录前言必备理论知识:例子:前言有C#经验,使用起来,驾轻就熟。就是语法糖。但是也要熟悉用法,才好众享丝滑。内容参考:Chatjpt、文心一言必备理论知识:捕获列表:[]:默认不捕获任何变量;[=]:默认以值捕获所有变量;内部有一个相应的副本[&]:默认以引用捕获所有变量;[x]:仅以值捕获x,其它......
  • C++中的深拷贝和浅拷贝介绍
    对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如:classBase{public:Base():m_a(0),m_b(0){}Base(inta,intb):m_a(a),m_b(b){}private:intm_a;intm_b;};intmain(){in......
  • [MAUI]实现动态拖拽排序列表
    @目录创建页面元素创建可绑定对象创建绑定服务类拖拽(Drag)拖拽悬停,经过(DragOver)释放(Drop)限流(Throttle)和防抖(Debounce)项目地址上一章我们使用拖放(drag-drop)手势识别实现了可拖拽排序列表,对于列表中的条目,完整的拖拽排序过程是:手指触碰条目->拖拽条目->拖拽悬停在另一个......
  • C/C++中结构体占用内存大小的计算方法
    两个值:对齐系数:一般为8个字节。#pragmapack(8)设置对齐系数为8。有效对齐值:假设结构体中最长的类型的长度为len,则有效对齐值=min(len,对齐系数)。计算规则:计算存放的位置:第一个成员放在位置0,后面的成员A存放的时候,会先计算size=min(A大小,有效对齐值),A只放在size的整数倍......
  • Docker容器化代码上线
    启动gitlab和jenkins存在的问题1)gitlab拉代码地址2)Jenkins如何拉gitlab代码3)Jenkins公钥如何永久保存4)Jenkins拉下来代码之后,需要将代码打到docker镜像中,jenkins这台容器如何执行docker命令5)Jenkins中,如何登录harbor(永久登录harbor)主机IP角色docker0110.0.0.101webdocker0210.0......
  • linux系统docker容器部署项目字体问题-Graphics2D在容器里面不显示字体
    继上一个博客中生成签章图片后,今日遇到一个问题,本地不管如何改代码,都会将签名文字显示出来。但是...........一旦部署在linux系统后,一直打印不出来,,纠结的呀。。完全没想到,原来是linux系统里面不兼容本地的字体,也就是没有那么多中文字体,除非安装。可以惊醒安装字体:参考文档:http:......
  • C++ explicit
    C++explicitexplicit关键字有两个用途:指定构造函数或者转换函数(C++11起)为显示,即它不用用于隐式转换和赋值初始化。可以与常量表达式一同使用。当该表达式为true才为显示转换(C++20起)。1.将构造函数标记为显式C++中的explicit关键字通常用来将构造函数标记为显式类型转换,......