C++进阶 —— C++11新增容器

news2024/11/16 21:27:01

目录

一,array

二,forward_list

三,unordered

unordered_set

unordered_multiset

unordered_map

unordered_multimap


静态数组array、forward_list、unordered系列;

一,array

      array是固定大小尺寸的序列容器;其内部,不存储除元素本身外的任何其他数据;不像其他容器,不通过分配器allocator管理元素,也无法动态的调整大小;零大小的数组也是有效的,但不应被引用;交换两个数组容器是线性操作;

//迭代器
begin(),end()
rbegin(),rend()
cbegin(),cend()
crbegin(),crend()

//容量
size()
empty()
//元素访问
reference operator[] (size_type n);
reference at ( size_type n );
reference front();
reference back();
value_type* data() noexcept;
//修改
void fill (const value_type& val);
void swap (array& x) noexcept(noexcept(swap(declval<value_type&>(),declval<value_type&>())));
//非成员函数
template <size_t I, class T, size_t N> T& get (array<T,N>& arr) noexcept;
template <size_t I, class T, size_t N> T&& get (array<T,N>&& arr) noexcept;
template <size_t I, class T, size_t N> const T& get (const array<T,N>& arr) noexcept;

二,forward_list

         该类容器是以单链表实现的,能以O(1)快速在任意位置插入或删除操作;与list容器相比,此容器为单链只能单方向迭代,且效率较高;与其他标准容器(array、vector、deque)相比,其在插入、提取、移动任意位置元素表现更好,如排序;但缺点是不可直接通过位置访问,需从头迭代;考虑到效率,此容器没有容量size成员函数,获取大小size可通过begin、end;

构造函数

其他成员函数

//迭代器
before_begin()
begin(),end()
cbefore_begin()
cbegin(),cend()

empty()
front()
swap ();
resize ();
clear();
//修改
void assign (InputIterator first, InputIterator last);
void emplace_front (Args&&... args);
iterator emplace_after (const_iterator position, Args&&... args);

void push_front (const value_type& val);
void pop_front();

iterator insert_after ( const_iterator position, const value_type& val );
iterator erase_after (const_iterator position);
//操作
void splice_after (const_iterator position, forward_list& fwdlst);
void remove (const value_type& val);
void remove_if (Predicate pred);
void unique();	
void merge (forward_list& fwdlst);
void sort();
void reverse() noexcept;

三,unordered

  • unordered_set
  • unordered_multiset
  • unordered_map
  • unordered_multimap

unordered_set

         该容器存储的元素唯一,但没有特定顺序,可根据元素值快速查询;元素的同时也是键,键不可变,因此值也不可改,但可插入和删除;其内部元素不是按特定顺序排序的,而是根据哈希值以快速访问各个元素;unordered_set容器比set容器访问元素更快;

构造函数

其他成员函数

//迭代器
begin(),end()
cbegin(),cend()

size()
empty()
swap ();
clear();
//元素查找
iterator find ( const key_type& k );
size_type count ( const key_type& k ) const;
pair<iterator,iterator> equal_range ( const key_type& k );
//修改
pair <iterator,bool> emplace ( Args&&... args );
iterator emplace_hint ( const_iterator position, Args&&... args );
pair<iterator,bool> insert ( const value_type& val );
iterator erase ( const_iterator position );
size_type bucket_count() const noexcept;
size_type max_bucket_count() const noexcept;
size_type bucket_size ( size_type n ) const;
size_type bucket ( const key_type& k ) const;

float load_factor() const noexcept;
float max_load_factor() const noexcept;
void rehash ( size_type n );
void reserve ( size_type n );

hasher hash_function() const;
key_equal key_eq() const;
allocator_type get_allocator() const noexcept;

unordered_multiset

        该容器存储的元素没有特定顺序,可根据元素值快速查询;与unordered_set非常相似,但可以不同元素拥有相同值;元素的同时也是键,键不可变,因此值也不可改,但可插入和删除;其内部元素不是按特定顺序排序的,而是根据哈希值以快速访问各个元素;相同值的元素在同一bucket中,可迭代遍历其中所有元素;

构造函数

其他成员函数

//迭代器
begin(),end()
cbegin(),cend()

size()
empty()
swap ();
clear();
//元素查找
iterator find ( const key_type& k );
size_type count ( const key_type& k ) const;
pair<iterator,iterator> equal_range ( const key_type& k );
//修改
iterator emplace ( Args&&... args );
iterator emplace_hint ( const_iterator position, Args&&... args );
iterator insert ( const value_type& val );
iterator erase ( const_iterator position );
size_type bucket_count() const noexcept;
size_type max_bucket_count() const noexcept;
size_type bucket_size ( size_type n ) const;
size_type bucket ( const key_type& k ) const;

float load_factor() const noexcept;
float max_load_factor() const noexcept;
void rehash ( size_type n );
void reserve ( size_type n );

hasher hash_function() const;
key_equal key_eq() const;
allocator_type get_allocator() const noexcept;

unordered_map

        该容器是一种关联容器,存储由键值对组成的元素,可根据键值快速查找;通过键值唯一标识元素,对应的映射值类型可能不同;其内部没有特定的排序,而是根据哈希值以快速访问各个元素;可通过键直接访问元素[],比map容器更快;

构造函数

其他成员函数

//迭代器
begin(),end()
cbegin(),cend()

size()
empty()
swap ();
clear();
//访问元素
mapped_type& operator[] ( const key_type& k );
mapped_type& at ( const key_type& k );
//元素查找
iterator find ( const key_type& k );
size_type count ( const key_type& k ) const;
pair<iterator,iterator> equal_range ( const key_type& k );
//修改
pair<iterator, bool> emplace ( Args&&... args );
iterator emplace_hint ( const_iterator position, Args&&... args );
pair<iterator,bool> insert ( const value_type& val );
iterator erase ( const_iterator position );
size_type bucket_count() const noexcept;
size_type max_bucket_count() const noexcept;
size_type bucket_size ( size_type n ) const;
size_type bucket ( const key_type& k ) const;

float load_factor() const noexcept;
float max_load_factor() const noexcept;
void rehash( size_type n );
void reserve ( size_type n );

hasher hash_function() const;
key_equal key_eq() const;
allocator_type get_allocator() const noexcept;

unordered_multimap

        该容器是一种关联容器,存储由键值对组成的元素,与unordered_map非常相似,但允许不同元素拥有相同键值;通过键值唯一标识元素,对应的映射值类型可能不同;其内部没有特定的排序,而是根据哈希值以快速访问各个元素;相同键值的元素在同一bucket中,可迭代遍历其中所有元素;

构造函数

其他成员函数

//迭代器
begin(),end()
cbegin(),cend()

size()
empty()
swap ();
clear();
//元素查找
iterator find ( const key_type& k );
size_type count ( const key_type& k ) const;
pair<iterator,iterator> equal_range ( const key_type& k );
//修改
iterator emplace ( Args&&... args );
iterator emplace_hint ( const_iterator position, Args&&... args );
iterator insert ( const value_type& val );
iterator erase ( const_iterator position );
size_type bucket_count() const noexcept;
size_type max_bucket_count() const noexcept;
size_type bucket_size ( size_type n ) const;
size_type bucket ( const key_type& k ) const;

float load_factor() const noexcept;
float max_load_factor() const noexcept;
void rehash( size_type n );
void reserve( size_type n );

hasher hash_function() const;
key_equal key_eq() const;
allocator_type get_allocator() const noexcept;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/612010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年6月东莞/惠州/深圳CPDA数据分析师认证招生

CPDA数据分析师认证是大数据方面的认证&#xff0c;助力数据分析人员打下扎实的数据分析基础知识功底&#xff0c;为入门数据分析保驾护航。 帮助数据分析人员掌握系统化的数据分析思维和方法论&#xff0c;提升工作效率和决策能力&#xff0c;遇到问题能够举一反三&#xff0c…

100天精通Golang(基础入门篇)——第1天:学习Go语言基本概念

&#x1f337; 博主 libin9iOak带您 Go to Golang Language.✨ &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &#x1f30a; 《I…

实战:Spring Cloud Stream消息驱动框架整合rabbitMq

文章目录 前言Spring Cloud Stream简析Spring Cloud Stream与rabbitmq整合1、添加pom依赖2、application.yml增加mq配置3、定义输入输出信道4、使用输入输出信道收发消息5、模拟正常消息消费6、模拟异常消息 前言 相信很多同学都开发过WEB服务&#xff0c;在WEB服务的开发中一…

Web端3D模型轻量化工具如何实现建筑行业“数字化”建设?

随着数字化技术的飞速发展&#xff0c;建筑行业也在不断寻找新的技术手段来提供高产能和建筑质量。其中&#xff0c;Web端3D模型轻量化工具HOOPS Communicator SDK在建筑行业中的应用不断地得到了市场的广泛注意和应用。本文将深入探讨HOOPS Communicator在建筑行业中的应用及其…

转动的车轮-第14届蓝桥杯国赛Scratch真题初中级组第2题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第144讲。 转动的车轮&#xff0c;本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第2题…

Python数据攻略-DataFrame的数据操作

大家好&#xff0c;我是Mr数据杨&#xff0c;今天我们就来谈谈Python中的数据访问和修改。 首先&#xff0c;你们一定都听过《三国演义》吧&#xff0c;里面的人物和事情其实就像我们Python中的数据。比如曹操就像我们的数据元素&#xff0c;他的性格特点、军事才能等就像我们…

5年开发经验,看完这份37W字Java高性能架构,终于拿到架构师薪资

其实现在很多的开发人员并不能解决从架构的角度全方位地了解在Java编程过程中各阶段会出现的典型问题&#xff0c;更没办法深入到底层原理了解问题出现的原因&#xff01; 且随着当下面试越来越深入到底层&#xff0c;如果大家对于底层的原理不了解的话&#xff0c;是很难做出…

JDK11+mybatis-plus+shardingsphere分库分表

1、引入jar dynamic-datasource-spring-boot-starter&#xff1a;2.5.6 sharding-jdbc-spring-boot-starter&#xff1a;4.1.1 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId>&…

微调样本质量胜于数量 LIMA: Less Is More for Alignment

1、总体介绍 大型语言模型的训练分为两个阶段&#xff1a;&#xff08;1&#xff09;从原始文本中进行无监督的预训练&#xff0c;以学习通用的表征&#xff1b;&#xff08;2&#xff09;大规模的指令学习和强化学习&#xff0c;以更好地适应最终任务和用户的偏好。 作者通过…

作为网络安全工程师,都有哪些公司可以选?

招聘平台 首选内推 其次是公司自有招聘平台 再是第三方平台&#xff1a;boos直聘、前程无忧、拉钩、猎聘、牛客、牛聘 乙方 启明星辰 商标&#xff1a;云众可信&#xff0c;云子可信 投资&#xff1a;网御星云&#xff0c;恒安嘉新 拳头产品&#xff1a;Secin 社区、天清…

企企通×天能股份SRM一期项目成功上线,持续深化企业采购数字化

近期&#xff0c;企企通凭借在赋能客户数字化转型方面的优秀实践与丰富的解决方案&#xff0c;荣获天能电池集团股份有限公司&#xff08;以下简称“天能股份”&#xff09;颁发的“2022年度数字化优秀供应商奖”&#xff0c;同时&#xff0c;企企通SRM项目还获得天能股份采购管…

vue-cli4打包优化

项目开始时webpack配置 vue-cli3以后&#xff0c;我们修改webpack配置&#xff0c;需要自己在项目根路径下创建vue.config.js文件。 一、 配置 proxy 跨域 使用vue-cli发开项目&#xff0c;在本地开发环境中&#xff0c;如果遇到跨域的问题。可以通过配置proxy的方式&#xff…

uniapp(二) 之 uniapp 搭建与组件库的引用

小扩展&#xff1a; rpx&#xff08;responsive pixel&#xff09;:可以根据屏幕宽度自适应。规定屏幕宽度为750rpx。如果iphon6上&#xff0c;屏幕宽度为375px,共有750个像素&#xff0c;则750rpx 375培训 750物理像素&#xff0c;1rpx 0.5px 1物理像素。 页面跳转&#xff…

你知道TikTok的推荐算法吗?TikTok数据分析平台哪家好?

作为当下最受欢迎的社交媒体&#xff0c;TikTok这几年的成绩大家也是有目共睹了&#xff0c;超10亿的月活加上大量活跃的年轻人&#xff0c;让无数企业和品牌为之心动。入局的人越来越多&#xff0c;想要在众多竞争者中脱颖而出&#xff0c;入局前需要了解TikTok底层逻辑和推荐…

Treadlocal源码实例详解

我们都知道treadlocal维护变量时候&#xff0c;可以为每个线程维护一个独立的副本&#xff0c;改变的是自己线程的数据。 ThreadLocal公用方法有四个&#xff1a;get&#xff0c;set&#xff0c;remove&#xff0c;intiValue 既然threadLocalMap是局部变量&#xff0c;所以他存…

内网安全:内网渗透.(拿到内网主机最高权限 vulntarget 靶场 1)

内网安全&#xff1a;内网渗透.&#xff08;拿到内网主机最高权限&#xff09; 内网穿透又被称为NAT穿透&#xff0c;内网端口映射外网&#xff0c;在处于使用了NAT设备的私有TCP/IP网络中的主机之间建立连接的问题。通过映射端口&#xff0c;让外网的电脑找到处于内网的电脑。…

中国人民大学与加拿大女王大学金融硕士——人生选对方向很重要

有人说&#xff0c;人生最重要的不是财富、不是荣誉&#xff0c;而是选择一条正确的道路。选择正确的方向&#xff0c;对一个人的成长和事业的成功与否&#xff0c;起着决定作用。有了方向&#xff0c;你前进的每一步都跟接近幸福。在职计划读研的你有了解过中国人民大学与加拿…

Linux - 第23节 - Linux高级IO(一)

1.IO的基本概念 IO的概念&#xff1a; I/O&#xff08;input/output&#xff09;也就是输入和输出&#xff0c;在著名的冯诺依曼体系结构当中&#xff0c;将数据从输入设备拷贝到内存就叫做输入&#xff0c;将数据从内存拷贝到输出设备就叫做输出。 • 对文件进行的读写操作本质…

SpringBoot注解详解,建议收藏!

一、简介 基于 SpringBoot 平台开发的项目数不胜数&#xff0c;与常规的基于Spring开发的项目最大的不同之处&#xff0c;SpringBoot 里面提供了大量的注解用于快速开发&#xff0c;而且非常简单&#xff0c;基本可以做到开箱即用! 那 SpringBoot 为开发者提供了多少注解呢?…

《大数据技术与应用》课程实验报告|week12|实验8|Pig——高级编程环境|验证评估函数

目录 一、实验内容 二、实验目的 三、实验设备 四、实验步骤 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 步骤七 步骤八 步骤九 步骤十 步骤十一 步骤十二 步骤十三 步骤十四 步骤十五 步骤十六 五、实验结果 六、实验小结 一、实验内容 验证19.5节中的…