STL序列式容器之vector

本文介绍了STL容器的基本分类,包括序列式容器和关联式容器,并深入探讨了vector的特性,如迭代器类型、数据结构及内存管理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们需要对STL的容器有一个宏观的概念,然后在仔细讨论vector。

STL容器分为两类:分别是序列式容器和关联式容器。

序列式容器:

vector, heap, priority_queue, list, slist, deque, stack, queue.

需要说明的是,heap内含一个vector,priority_queue内含一个heap,stack内含一个deque,queue内含一个deque,这样的关系实际上是将vector或者deque改头换面而成,因此deque,stack等也常称为配接器。

关联式容器:

set,map,multiset,multimap,他们的基础都是红黑色。

未标准化的:hash_set, hast_map, hash_multiset, hash_multimap, 他们的基础是hashtable,即哈希表。


下面我们详细学习一下vector。

vector的实现技术关键在于对大小的控制以及重新配置时的数据移动效率。

重新配置需要三个阶段:配置新空间-》数据移动-》释放旧空间

1、vector的迭代器

由于vector和数组相似都是维护一段连续的内存空间,因此可以支持随机访问,因此vector的迭代器是随机存取迭代器。

2、vector的数据结构

vector需要3个迭代器来维护,分别是start,finish以及end_of_storage。为了理解这三个迭代器的作用,就需要明白向量大小和容量的关系,容量永远要大于或者等于向量大小。(size()和capacity())注意finish和end_of_storage都是指向最后一个元素的下一个位置,有了这些就很容易求得向量的大小和容量。

3、vector的内存管理

vector采用的动态增加大小,并不是在原空间之后连接新空间(因为无法保证原空间之后还有可以的新空间),而是以原大小的两倍配置一块新的空间,然后拷贝数据,并在拷贝完原内容之后构造新元素,并释放新空间。因此,对vector的任何操作,一旦引起空间重新配置,指向原vector的迭代器将失效,这是我们很容易犯的一个错误。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值