STL序列式容器之vector
来源:互联网 发布:js set time out停止 编辑:程序博客网 时间:2024/05/16 14:08
首先我们需要对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的迭代器将失效,这是我们很容易犯的一个错误。
- STL序列式容器之vector
- STL 序列容器之vector
- STL序列容器之vector
- STL六大组件之容器篇(序列式容器vector)
- 【STL】序列式容器:vector
- 【STL】序列式容器--vector
- STL容器-序列式容器vector
- STL 源码剖析序列式容器之vector(四)
- SGI STL的序列式容器之vector浅析
- STL学习笔记--4、序列式容器之vector
- STL源码剖析之序列式容器vector
- STL源码剖析-序列式容器之vector
- STL中序列容器之Vector
- stl之序列容器——vector
- STL中序列式容器之一vector
- 【C++ STL】序列式容器Vector
- STL:序列式容器vector总结
- STL-序列式容器-vector详解
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq
- 类的成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的
- C++11多线程之promise
- R语言笔记六
- php实现的视频质量检测配置页面,异步调用不退出的进程:
- STL序列式容器之vector
- 毕业五年之感想--写给自己的话
- 内存池 2014-07-10
- PHP判断是否是移动设备访问
- 关于int main( int argc, char* argv[] ) 中arg和argv参数的解析及调试
- HTML5的新特性
- hdu 4899 Hero meet devil
- TensorFlow 深度学习笔记
- mmap内存映射