C++中STL各容器详解

STL的六大组件 STL六大组件详细介绍 阅读详情

一、STL中六大组件:

1)容器(Container),是一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;

2)迭代器(Iterator),提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象。迭代器实际上也是一种将operator*、operator->、operator++、operator--等指针相关操作予以重载的class template

3)算法(Algorithm),是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用;

4)仿函数(Function object) ,行为类似函数,可作为算法的某种策略。从实现角度看,仿函数是一种重载了operator()的class或class template。一般函数指针可视为狭义的仿函数。

5)迭代适配器(Adaptor),一种用来修饰容器、仿函数、迭代器接口的东西。STL提供的的queue和stack,虽然看似容器,其实只能算是一种容器配接器,因为他们的弟弟不完全借助deque,所有操作都由底层deque提供。

6)配置器(allocator),负责空间配置与管理。实现了动态空间配置,空间管理,空间释放的class template。

7)六大组件的交互关系:容器通过空间配置器取得数据存储空间,算法通过迭代器取得容器的内容,仿函数可以协助空间配置器完成不同的策略变化,适配器可以修饰或套接仿函数。

 

二、底层数据结构的实现

1.vector       底层数据结构为数组 ,支持快速随机访问。

2.list            底层数据结构为双向链表,支持快速增删。

3.deque       底层数据结构为一个中央控制器和多个缓冲区,支持首尾(中间不能)快速增删,也支持随机访问,看起来像是list和vector的结合品。

4.stack        底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时。

5.queue     底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时。

(stack和queue其实是适配器,而不叫容器,因为是对容器的再封装)

6.priority_queue     底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现。

7.set                   底层数据结构为红黑树,有序,不重复

8.multiset            底层数据结构为红黑树,有序,可重复 

9.map                 底层数据结构为红黑树,有序,不重复

10.multimap      底层数据结构为红黑树,有序,可重复

11.hash_set         底层数据结构为hash表,无序,不重复

12.hash_multiset   底层数据结构为hash表,无序,可重复

13.hash_map       底层数据结构为hash表,无序,不重复

14.hash_multimap  底层数据结构为hash表,无序,可重复 

 

容器(Container)

1、STL的容器种类

(1)序列式容器(Sequence container), 这是- .种有序(ordered) 集合,其内每个元素均有确凿的位置一-取决 于插人时机和地点,与元素值无关。如果你以追加方式对一.个集合置人6个元素,它们的排列次序将和置人次序- -致。STL 提供了5个定义好的序列式容器: array. vector、 deque、 list 和forward_ list。

(2)关联式容器(Associative container),这是-种已排序(sorted) 集合,元素位置取决于其value (或key---如 果元素是个key/value pair)和给定的某个排序准则。如果将6个元素置入这样的集合中,它们的值将决定它们的次序,和插入次序无关。STL 提供了4个关联式容器: set、 multiset、 map和multimap。

(3)无序容器(Unordered (associative) container), 这是一 种无序集合(unordered collec-tion),其内每个元素的位置无关紧要,唯一重要的是某特定元素是否位于此集合内。元素值或其安插顺序,都不影响。

 

2、容器类的共通操作

c1 = move(c2) //赋值,c2赋给c1

元素访问:

a、简单访问

for(auto& elem : coll){

cout<<elem;

}

b、指定位置操作的访问

for(auto pos=coll.begin(); pos!=coll.end; ++pos){

*pos = ...;

}

c、使用迭代器访问

for(iterator pos=coll.begin(); pos!=coll.end(); ++pos){

cout<<*pos;

}

 

3、容器提供的类型

4、序列式容器

(1)Array(其class名为array)

a、类似数组,固定大小,随机访问。

例:

array<string,5>  coll = {“hello”, “world”}; //初始化

for(int i = 0; i<coll.size(); i++){

cout<<coll[i]<,endl;

}

b、Class array<>的构造函数

c、Class array<>的赋值操作

d、Class array<>元素直接访问

注:只有at()执行范围检查

e、Class array<>迭代器的相关操作

f、把array当成C-Style

C++ STL六大组件-1-Container(容器 C++ STL六大组件-简析 ---------------------------------------------------------------------------------------------------------------------------------------------- C++ STL六大组件-1-Container(容器) 容器定义 常见容器 容器分类 顺序容器 vector deque list 关联容器 map . 阅读详情

相关推荐

C++ STL vector容器详解

vector 容器是中最常用的容器之一,它和 array 容器非常类似,都可以看做是对普通数组的“升级版”。不同之处在于,array 实现的是静态数组(容量固定的数组),而 vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预。vector 常被称为向量容器,因为该容器擅长在尾部插入或删除元素,在常量时间内就可以完成,时间复杂度为O(1);

Lemon_C17y的博客 2344

[C++顺序容器 cpp]:详解C++ STL中的顺序容器

C++ STL中的顺序容器是一种非常重要的数据结构,它是指元素按照一定的顺序排列的一类容器。顺序容器C++ STL中非常常用的容器之一,不同的顺序容器有不同的特点,我们需要根据具体的需求来选择合适的容器。在实际开发中,我们经常会用到这些容器来实现各种算法和数据结构,因此熟练掌握顺序容器的使用是非常重要的。forward_list是一个单向链表,可以在任意位置添加/删除元素,但是不支持快速的随机访问。list是一个双向链表,可以在任意位置添加/删除元素,但是不支持快速的随机访问。

2301_79325339的博客 149

C++STL容器介绍

C++面试题

夏天的狂风的专栏 574

详解 C++ STL 六大组件,看完不懂打我...

STL 提供了六大组件,彼此组合套用协同工作。这六大组件分别是: 容器(Containers):各种数据结构,如 vector、list、deque、set、map 等。从实现的角度来看,容器是一种 class template。 算法(Algorithms):各种常用算法,提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作,比如 sort、search、copy、erase。从实现的角度来看,STL 算法是一种 function template。 迭代器(Iterators):

程序员「阿基米东」的编程之旅 1万+

STL六大组件

一、STL六大组件 STL提供六大组件,它们之间可以相互组合使用。 1、容器(containers) 容器用来存放数据,包括各种数据结构,如vector,list,deque,set,map等。从实现的角度来看,STL容器是一种class template。 2、算法(algorithms) 算法包括各种常用的sort,search,copy,erase, find等等。才实现的角度来看...

qq_33215865的博客 2632

STL中常用容器总结

1.vector(向量)(底层是数组) 向量没有确定数据类型所以向量可以是多种数据类型,但是注意一个向量对象只能有一种数据类型,可以构造二维向量(二维数组)比如二维整型向量vector ,但值得注意的是二维向量的大元素和小元素(行元素和最小元素)都是一个向量可以不分配大小而是通过数据的规模分配大小 这里介绍整型向量的常用方法函数(其他类型的可以自行通过转换类型达到相同的效果): vector a(...

Gardenia 3398

C++STL容器详解【上】

C++中的STL容器 => [ string vector deque stack queue ]

2201_75414908的博客 2189

C++STLSTL容器详解

容器底层实现描述包含头文件向量vector数组,快速访问可以在O(1) 时间内访问和修改任意元素,在序列尾部进行插入和删除时,具有 O(1)时间复杂度,对任意项的插入和删除就有的时间复杂度较高,尤其对向量头的添加和删除开销非常高双端队列deque一个中央控制器和多个缓冲区基本上与向量相同,唯一的不同是,其在序列头部插入和删除操作时间复杂度也为 O(1)表list双向链表,快速增删对任意元素的访问时间复杂度为 O(n),支持快速插入删除 O(1)

努力让自己的能力配得上梦想. 978

C++ STL容器 —— string 用法详解

STL容器——string函数用法详解 写在前面:近期正在重新学习C++STL容器,因此准备用一些大白话将STL函数的用法详细记录一下,主要介绍一些基本函数是怎么用的,并不涉及原理。写的不好或者理解的有问题, 请见谅. 下面说的 “运行之后” 表示: 运行上个语句之后的结果. 一行如果说的太长的话, 就得拖动下面的进度条才能看到后面的内容 因此将一段话分成了多行,就像现在这种形式 需要头文件...

Ember_Sky 9572

C++ STL容器 内容详解

C++ STL容器 简单来说,容器就是一些模板类的集合,但和普通模板类不同的是,容器中封装的是组织数据的方法(也就是数据结构)。 STL提供三类标准容器:序列容器、排序容器和哈希容器,其中后两类容器也称为关联容器。 序列容器 主要包括vector向量容器、list列表容器、deque双端队列容器。 之所以被称为序列容器,是因为元素在容器中的位置与元素的值无关,即容器不是排序的,容器内元素不是有序的。将元素插入容器时,指定在什么位置,元素就会位于什么位置。 排序容器 包括set集合容器、multise.

薛定谔的猫的博客 1302

C++STL容器详解(包含十种常用容器

C++stl是提高编写效率的一个利器,是算法类竞赛必不可少的工具,本篇博客将详细总结C++STL的各种容器及其常用方法

2203_75327677的博客 4万+

C++ STL容器底层详解

转载自:C++STL容器的底层实现详解 文章目录顺序容器vector(向量容器)deque(双端队列)liststackqueuepriority_queue关联式容器setmultisethash_setmap(key,value)multimaphashtablehash_mapunordered_mapmap、hash_map、unordered_map比较 顺序容器 vector(向量容器) 特点 内存可2倍增长的动态数组 数据结构:线性连续空间 三个迭代器:start、finish、end_o

qq_40156159的博客 4093

C++详解STL容器之一:list

本篇的内容有:list简单的介绍,形象化的模型,优缺点,源码思路,模拟实现。希望本篇内容能帮助读者更好的认识list

2301_79796701的博客 2160

C++STL——vector容器详解

本文介绍了C++ STL中vector容器的基本概念和常用操作。vector是一种动态数组,相比静态数组array具有更灵活的空间管理能力,能够自动扩容以容纳新元素。文章首先阐述了vector的实现原理,包括其迭代器类型和数据结构特点。随后详细讲解了vector的构造函数、特性操作(如size、capacity、resize等)以及元素访问方法(如operator[]、at()等)。重点比较了reserve和resize的区别,并通过示例展示了如何高效使用vector避免频繁内存重分配。最后还介绍了vect

阿标de杂货铺 2841

C++STL容器的底层实现详解

文章目录顺序容器vector(向量容器)deque(双端队列)list关联容器set(集合)multisetmap(key,value)multimap 顺序容器 vector(向量容器) 特点 内存可2倍增长的动态数组 数据结构:线性连续空间 维护三个迭代器:start、finish、end_of_storage 注意:动态增加大小,并不是在原空间之后接续新空间(因为无法保证之后尚有可供...

qq_43313035 1万+

30-seconds-of-cpp项目解析:C++ STL中map容器的erase操作详解

C++标准模板库(STL)中,`map`是一种非常重要的关联容器,它以键值对(key-value)的形式存储数据。`erase()`作为`map`容器的一个核心成员函数,用于从容器中删除元素。本文将深入探讨`map::erase()`函数的各种用法和注意事项。 ## erase函数的基本用法 `map::erase()`函数有三种主要形式: 1. **通过键值删除元素**:`size_ty...

gitblog_00287的博客 785

C++ STL容器详解

C++ 标准库提供了多种容器类,用于存储和管理数据。这些容器类分为两大类:序列容器和关联容器。选择合适的容器类取决于具体的应用场景和性能需求。需要随机访问且频繁增删操作时,使用或std::deque。需要高效插入和删除操作时,使用std::list或。需要有序集合时,使用std::set或std::map。需要快速查找时,使用或。需要栈或队列功能时,使用std::stack或std::queue。

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 827

C++STL容器详解

STL(Standard Template Library)是C++标准库中的一个重要组成部分,它提供了一组通用的模板类和函数,用于实现常用的数据结构和算法。(Containers):STL提供了多种容器类,如向量(vector)、链表(list)、双向链表(deque)、集合(set)、映射(map)等。总而言之,STLC++开发中非常重要的工具之一,它提供了高效的数据结构和算法,能够提高程序的性能、减少开发时间,并提高代码的重用性和可维护性。这样可以大大提高代码的重用性,减少了开发时间和维护成本。

Jinyizhi2233的博客 4554
上一篇: Json入门基础、Json常用数据类型、Json语法
下一篇: JsonCpp的基本用法
king_weng
博客等级 码龄9年 133粉丝 183原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值