三 容器综述

来源:互联网 发布:golang accept 编辑:程序博客网 时间:2024/06/16 13:06

一 容器(containers):

容器用来管理一组元素,STL提供了如下两类容器:


(1)序列式容器(sequential containers):

序列式容器,其中的元素都是可序的,但未必有序。

STL提供了vector、deque、list、stack、queue、priority_queue等。其中stack、queue由于只是将deque改头换面而成,技术上被归为适配器(adapter)。也可以array和strings当做一种序列式容器。


(2)关联式容器(Associative Containers)

关联式容器:已序群集,元素位置取决于特定的排序准则。

标准STL关联式容器分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表)。这些容器底层机制均以RB-tree(红黑树)完成。RB-tree也是一个独立容器,但不对外开放。

此外,SGI STL还提供了不在标准规格之列的关联式容器:hash_table(散列表),以及以hash_table为底层机制而完成的hash_set(散列集合)、hash_multiset(散列多键集合)、hash_map(散列映射表)、hash_multimap(散列多键映射表)。


二 所有容器的共通能力和共通操作


(1)STL容器三个最核心的能力:

1. 所有容器提供的都是“value语意”而非“reference语意”。

容器进行元素的安插操作时,内部实施的是拷贝操作,置于容器内。因此STL容器内的每一个元素都必须能够被拷贝。

2. 总体而言,所有元素形成一个次序(order)。即你可以依次相同次序一次或多次遍历每个元素。

3. 一般而言,各项操作并非绝对安全。调用者必须确保传给操作函数的参数符号要求。违反这些需求会导致未定义的行为,通常STL不会抛出异常。


(2)容器的共通操作



原创粉丝点击