STL(Standard Template Library)标准模板库
1.概念
标准模板库(英文:Standard Template Library,缩写:STL),是一个C++软件库,也是C++标准程序库的一部分。其中包含5个组件,分别为算法、容器、迭代器、函数、适配器。模板是C++程序设计语言中的一个重要特征,而标准模板库正是基于此特征。标准模板库使得C++编程语言在有了同Java一样强大的类库的同时,保有了更大的可扩展性。
—————-摘自“维基百科”
2.组成
3.迭代器(Iterator)
实际上迭代器是一种软件设计模式,STL通过迭代器模式提供了访问容器元素使用的泛型抽象。每个容器都提供了容器特定的迭代器,说的通俗些,迭代器就是增强版的智能指针我们不用理会容器提供的不同功能,访问容器元素的代码都可以使用迭代器呈现的统一接口。
a.声明一个特定容器迭代器:vector<int>:: iterator iter
b.声明一个特定容器的反向迭代器:vector<int>:: reverse_iterator riter
c.利用迭代器访问特定容器的元素:
vector<int> v;
vector<int>:: iterator iter;
for (iter = v.begin(); iter != v.end(); ++iter) {
//遍历元素
}
4.顺序容器(Sequence)
template name | Description | header file |
---|---|---|
vector | 1.由数组实现 | < vector > |
2.可以在尾部快速插入删除 | ||
3.可以随机访问容器中的元素(利用下标) | ||
list | 1.由双向链表实现 | < list > |
2.在任意位置可以快速插入删除 | ||
3.不可以随机访问容器中的元素 | ||
deque | 1.由指针数组实现 | < deque > |
2.可以在两端快速插入删除 | ||
3.可以随机访问容器中的元素 |
A.vector:
1.vector可以理解为C风格的数组(元素保存在连续的内存空间中),可以通过重载的operator[]访问和修改这些元素(通过指定元素数目的构造函数),但通过operator[]访问vector边界之外的元素得到的结果是未定义的。
2.指定初始元素值:vector<double> doublevector(10, 0.0) // 10个元素全部初始化为0.0
3.访问vector元素的其他方法:通过at(), front(), back()访问
at()方法 | 等同于operator[]运算符,区别在于at[]会执行边界检查,如果索引超出边界,at()会抛出out_of_range异常 |
---|
|front()方法|返回vector的第一个元素|
|back()方法|返回vector的最后一个元素|
4.用带initializer_list参数的构造函数,这个参数包含了vector中的初始元素:vector<int> intVector({1, 2, 3, 4, 5, 6})
5.vector的复制和赋值:vector类的复制构造函数和赋值运算符对vector中的所有元素执行深度复制
6.vector所有成员函数
成员函数 | 函数说明 |
---|---|
Constructors | 构造函数 |
Operators | 对vector进行赋值或比较 |
assign() | 对vector中的元素赋值 |
at() | 返回指定位置的元素 |
back() | 返回最后一个元素 |
begin() | 返回第一个元素的迭代器 |
capacity() | 返回vector所能容纳的元素的数量(在不重新分配内存的情况下) |
clear() | 清空所有元素 |
empty() | 判断vector是否为空(若为空返回true) |
end() | 返回最末尾元素的迭代器 |
erase() | 删除指定元素 |
front() | 返回第一个元素 |
get_allocator() | 返回vector的内存分配器 |
insert() | 插入元素到vector中(返回值指向新插入元素的迭代器) |
max_size() | 返回Vector所能容纳元素的最大数量(上限) |
pop_back() | 移除最后一个元素 |
push_back() | 在vector最后添加一个元素 |
rbegin |