STL 库初识
1. STL 库
1.1 STL 库的案例
类似学习了模板的概念。C++STL (标准模板库) 是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如:向量、链表、队列、栈。
1.2 C++ 标准模板库的三个组件
C++ 标准模板库的核心包括以下三个组件:
组件 | 描述 |
---|---|
容器 (Containers) | 容器是用来管理某一类对象的集合。C++提供了各种不同类型的容器,比如 deque、list、vector、map 等。 |
算法 (Algorithms) | 算法用于容器。它们提供了执行各种操作的方式,包括对容器执行初始化、排序、搜索和转换等操作。 |
迭代器 (itreators) | 迭代器用于遍历对象集合的元素。这些元素可能是容器,也可能是容器的子集。 |
1.3 案例展示
代码案例
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char const *argv[])
{
/*
得到了一个要求存储类型为 int 类型的 vector 容量
底层实现方式为数组形式,可以从数组角度分析,完成增删改查操作
*/
vector<int> v1 = vector<int>();
cout << "size : " << v1.size() << endl; // 0
cout << "capacity : " << v1.capacity() << endl; // 0
/*
vector 容器提供的插入数据的方法
*/
v1.push_back(1);
cout << "size : " << v1.size() << endl; // 1
cout << "capacity : " << v1.capacity() << endl; // 1
v1.push_back(2);
cout << "size : " << v1.size() << endl; // 2
cout << "capacity : " << v1.capacity() << endl; // 2
v1.push_back(3);
cout << "size : " << v1.size() << endl; // 3
cout << "capacity : " << v1.capacity() << endl; // 4
v1.push_back(4);
cout << "size : " << v1.size() << endl; // 4
cout << "capacity : " << v1.capacity() << endl; // 4
v1.push_back(5);
cout << "size : " << v1.size() << endl; // 5
cout << "capacity : " << v1.capacity() << endl; // 8
cout << "\n";
// 1 2 3 4 5
cout << "v1[2] : " << v1[2] << endl; // 3
/*
at(int idx);
返回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range 异常
*/
cout << "v1.at(2) : " << v1.at(2) << endl; // 3
/*
front();
返回容器中第一个数据元素
*/
cout << "v1.front() : " << v1.front() << endl; // 1
/*
back();
返回容器中最后一个数据元素
*/
cout << "v1.back() : " << v1.back() << endl; // 5
/*
删除最后一个元素
*/
v1.pop_back();
cout << "v1.back() : " << v1.back() << endl; // 4
return 0;
}
2. 迭代器
1.1 概述和分类
C++ STL 库中的迭代器和其分类:
迭代器类型 | 描述 |
---|---|
输入迭代器 (Input Iterator) | 用于读取数据序列的元素,只能使用前向迭代操作 |
输出迭代器 (Output Iterator) | 用于向数据序列写入元素,只能使用前向迭代操作 |
前向迭代器 (Forward Iterator) | 用于读写数据序列的元素,支持前向迭代操作 |
双向迭代器 (Bidirectional Iterator) | 用于读写数据序列的元素,支持前向和后向迭代操作 |
随机访问迭代器 (Random Access Iterator) | 用于读写数据序列的元素,支持随机访问操作和常数时间复杂度的元素访问 |
连续内存迭代器 (Contiguous Iterator) | 特殊形式的随机访问迭代器,用于在连续内存中移动 |
反向迭代器 (Reverse Iterator) | 反向封装其他迭代器,实现反向遍历操作 |
2.2 代码案例
利用 STL 库中使用频率较高的 vector 来演示迭代器
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char const *argv[])
{
// 得到一个要求存储类型为 int 类型的 vector 容量
vector<int> v1;
// 将数据放入 v1 里
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
vector<int>::iterator it = v1.begin();
/*
iterator 是一个针对于当前 vector 容器的迭代器
是访问数据内容的一个【指针】,如果想要提取 vector 中
存储的数据内容,需要通过 *it 获取
*/
cout << "*it : " << *it << endl; // 1
it++;
cout << "*it : " << *it << endl; // 2
cout << "--------------------------" << endl;
// 利用 for 循环展示整个数据情况
for (vector<int>::iterator it2 = v1.begin();
it2 != v1.end();
it2++)
{
cout << "*it2 : " << *it2 << endl;
}
return 0;
}