一、容器概述
STL 包含算法、容器和迭代器。容器主要分为以下几类:
- 序列式容器:vector, deque, list 等。
- 关联式容器:map, set, multiset, multimap 等。
- 无序关联容器:unordered_set, unordered_map, unordered_multiset, unordered_multimap 等。
- 容器适配器:stack, queue, priority_queue。
二、vector 容器详解
1. 定义
vector 是动态连续数组,具有以下特点:
- 支持随机访问,时间复杂度为 O(1)。
- 内存空间连续。
- 空间大小可动态变化,会自动扩容存储空间。
2. 底层原理
vector 内部使用三个指针指向对应的空间:
template <typename T> class vector {
private:
T* start; // 指向容器的起始位置
T* finish; // 指向最后一个有效元素的下一个位置
T* end_of_storage; // 指向分配的内存末尾(总容量的终点)
};
根据上述结构可知:
- 容器中元素的个数
size()=finish() - start()。 - 容器的容量
capacity()=end_of_storage() - start()。 - 当
capacity() == size()时,容器会自动扩容。
注意:扩容不是在原有内存空间后面直接进行,而是重新分配一块新的内存空间,将原有空间中的元素拷贝或移动到新空间,然后删除原来的空间。扩容后,原有的迭代器、引用、指针都会失效。
3. 常用的成员函数
(此处省略图片展示)
4. 代码实现
(1)初始化,插入,删除,清空
#include <iostream>
#include <vector>
using namespace std;
int main() {
/*----------vector 的初始化-----------------------*/
std::vector<int> v1;
cout << ;
( i = ; i < v(); ++i) {
cout << v1[i] << ;
}
cout << endl;
cout << ;
;
( i = ; i < v(); ++i) {
cout << v2[i] << ;
}
cout << endl;
;
cout << ;
( i = ; i < v(); ++i) {
cout << v3[i] << ;
}
cout << endl;
;
cout << ;
( i = ; i < v(); ++i) {
cout << v4[i] << ;
}
cout << endl;
arr[] = { , , , };
;
cout << ;
( i = ; i < v(); ++i) {
cout << v(i) << ;
}
cout << endl;
;
cout << ;
( num : v5) {
cout << num << ;
}
cout << endl;
v();
v();
v();
v(v() + , );
v(v(), , );
cout << ;
( num : v1)
{
cout << num << ;
}
cout << endl;
cout << << v() << endl;
v();
v(v() + );
v(v() + , v() - );
cout << ;
( num : v1) {
cout << num << ;
}
cout << endl;
v();
cout << << v() << endl;
cout << << v() << endl;
;
}


