C/C++编程:STL容器

小鱼儿 2022-05-17 08:56 360阅读 0赞

容器

有三类容器——顺序容器、关联容器和无序关联容器——每种都被设计为支持不同组的操作。

" class="reference-link">watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poaXpoZW5nZ3Vhbg_size_16_color_FFFFFF_t_70

C++标准就“如何在vector、deque、list”中做出选择提供了如下建议

  • vector是默认应使用的容器
  • 当需要频繁的在序列中间做插入和删除操作时,应该使用list
  • 当大多数插入和删除查找在序列的头部或者尾部时,deque是应该考虑的数据结构

可复制构造

  • 容器用于容纳数据,但不是所有的数据都能放入容器中。上面各种容器模板对所存数据类型有一个基本要求:可复制构造
  • 将数据放入容器的过程就是通过数据的复制构造函数在容器内创建数据的一个副本的过程。如果容器保存的是自定义类型,则最低要求该类型不能有一个私有的复制构造函数。

C++标准中对所有容器规定了一些基本要求。标准库中的所有容器都遵循这一系列要求。如果想要自定义容器也能用标准库中的算法,也要遵循这些要求。记C为容器类型,首先,容器中必须有若干与所存数据类型有关的嵌套定义类型,如下表所示:

20210426160712430.png

以std::vector为例,上面四种嵌套类型的定义分别如下:

  1. typedef std::vector<my_data> vec ;
  2. typedef typename vec::value_type data_type; // = my_data
  3. typedef typename vec::reference ref_type; // = my_data&
  4. typedef typename vec::const_reference cref_type; // = my_data const&;
  5. typedef typename vec::size_type size_type; // = size_t;

上面的要求不是必须要满足的,比如vector的bool就不能&

容器适配器

容器适配器提供顺序容器的不同接口。

20210309100644461.png

span

span 是相接的对象序列上的非占有视图,某个其他对象占有序列的存储

2021030910071120.png

迭代器非法化

只读方法决不非法化迭代器或引用。修改容器内容的方法可能非法化迭代器和/或引用,总结于此表格。




















































































类别 容器 插入后…… 擦除后…… 条件
迭代器合法? 引用合法? 迭代器合法? 引用合法?
顺序容器 array N/A N/A  
vector N/A 插入更改容量
被修改元素前
于被修改元素或其后
deque 是,除了被擦除元素 修改首或尾元素
仅修改中部
list 是,除了被擦除元素  
forward_list 是,除了被擦除元素  
关联容器 set

multiset

map

multimap

是,除了被擦除元素  
无序关联容器 unordered_set

unordered_multiset

unordered_map

unordered_multimap

N/A 插入导致重哈希
是,除了被擦除元素 无重哈希

https://msdn.microsoft.com/zh-cn/library/1e4kz2ct.aspx#语法

https://msdn.microsoft.com/zh-cn/library/155esdxw.aspx

发表评论

表情:
评论列表 (有 0 条评论,360人围观)

还没有评论,来说两句吧...

相关阅读

    相关 STL 容器类型

    1. STL有6种序列容器类型  1 vector     向量 相当于一个数组     在内存中分配一块连续的内存空间进行存储。支持不指定vector大小

    相关 stl容器排序

    C++编程优与Pascal的原因之一是C++中存在STL(标准模板库)。STL存在很多有用的方法。 C++模板库中的许多方法都需要相关参数有序,例如Sort()。显然,如果你

    相关 STL 容器小结

    顺序容器:为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器是的位置相对应。 顺序容器几乎可以保存任意类型的元素。Eg: vector<

    相关 C/C++编程STL容器

    容器 有三类容器——顺序容器、关联容器和无序关联容器——每种都被设计为支持不同组的操作。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_s

    相关 c++ 容器STL

    STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的