首先STL是系统提供好的库,仅需使用无需过多的了解内部实现!!!
序列式容器:容器中元素的位置由进入容器的时间和地点决定。
注:vector、deque均支持随机访问,而list不支持随机访问
一、vector容器:动态数组,支持随机访问
注:需引入<vector>头文件
Vectors are a kind of sequence containers. As such, their elements are ordered following a strict linear sequence. Vector containers are implemented as dynamic arrays; Just as regular arrays, vector containers have their elements stored in contiguous storage locations, which means that their elements can be accessed not only using iterators but also using offsets on regular pointers to elements. But unlike regular arrays, storage in vectors is handled automatically, allowing it to be expanded and contracted as needed. Vectors are good at:
|
vector模型展示:
1、vector动态增长原理:
vector原空间不够,导致新元素放不进去,vector会自动申请一块更大的空间,并把原空间的内容拷贝到新空间,随后把新元素加入,并释放原空间。
注:vector默认按两倍扩充空间,但当数据量大时,扩充倍数不定!
2、巧用vector swap 减缩空间
目的:为了是实现数据减少的同时,容器具体的空间也减少
vector<int>(v).swap(v);
注:首先使用拷贝构造函数,利用v初始化匿名对象,完了利用匿名对象调用swap接口去交换匿名对象和v的空间
交换的本质:交换两个容器的指针
二、deque容器:双端数组,支持随机访问
模型展示:
三、list容器:双向链表,不支持随机访问
容器模型展示: