STL①C++标准模板库包含三个核心组件:容器container、算法algorithm、迭代器iterator。
- 前言
- 示例demo
- 注意点
- 补充
前言
| 组件 | 描述 |
|---|---|
| 容器 | 容器是用来管理某一类对象的集合,C++提供了一系列各种不同的容器,比如deque、list、vector、map等等, |
| 算法 | 算法作用于容器,提供了执行各种操作的方式,包括i对容器内容执行初始化,排序、搜索和转换等操作。 |
| 迭代器 | 迭代器用于遍历对象集合的元素,这些集合可以是容器,也可以是容器的子集。 |
以上三个组件都带有非常丰富的预定义函数,帮助我们通过简单的方式处理复杂任务。
示例demo
给出向量容器vector,与数组十分类似,唯一差异在于,向量需要拓展大小的时候,自动处理存储请求。
#include注意点#include using namespace std; int main() { //创建一个向量存储int vector vec; int i; //显示vec的原始大小 cout << "vector origin size = " << vec.size() << endl; //输入前5个数值到向量之中 for (i = 0; i < 5; i++) { vec.push_back(i); } //显示vec拓展之后的大小 cout << "extend vec size = " << vec.size() << endl; //访问向量中的5个元素 for (i = 0; i < 5; i++) { cout << "value of vec [" << i << "] = " << vec[i] << endl; } //利用迭代器遍历 vector ::iterator v = vec.begin(); while (v != vec.end()) { cout << "value of v = " << *v << endl; v++; } return 0; }
- push_back成员函数在向量的尾部插入元素,若有必要会拓展向量的数值大小。
- size函数显示向量vector的大小。
- begin函数返回一个指向向量开头的迭代器。
- end函数返回一个指向向量末尾的迭代器。
补充
C++ STL中vector的capacity和size差异:
- size时当前vector容器真实占用的大小,也就是容器当前拥有多少个容器。
- capacity是指的发生realloc过程之前能够允许的最大元素数量,预分配的内存空间。
当然,这两个属性分别对应了两个不同的方法:resize()和 reverse()。
利用resize容器内的对象内存空间是真正存在的。
利用reverse仅仅只是修改了capacity的数值,容器内的对象还没有真实的内存空间,给出如下代码:
#include#include using std::vector; int main(void) { vector v; std::cout<<"v.size() == " << v.size() << " v.capacity() = " << v.capacity() << std::endl; v.reserve(10); std::cout<<"v.size() == " << v.size() << " v.capacity() = " << v.capacity() << std::endl; v.resize(10); v.push_back(0); std::cout<<"v.size() == " << v.size() << " v.capacity() = " << v.capacity() << std::endl; return 0; }
注意:
对于reverse(10)后接着直接使用[]访问越界会报错。
相关阐述:
针对capacity这个属性,STL的其他容器,例如list、map、deque等等,容器内存分布为散列,不会发生realloc的调用错误情况,因此可以说capacity属性对上述容器无效。
在STL中,拥有capacity属性的容器只有vector和string。



