STL基本概念:
STL——Standard Template Library (标准模板库)
提升开发效率并保证代码质量,通过泛型编程,使得这些数据结构和算法适用于多种数据类型
STL的六大组件:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器
容器:
这是用于存储数据的数据结构。
算法:
STL提供了一系列通用算法。
迭代器:
提供了访问容器中元素的方式,它是容器和算法之间的桥梁。
仿函数:
是一种重载了函数调用操作符operator()的类或对象,使得它们可以像函数一样被调用。
可以用来定制算法的行为,比如比较函数、平方函数等,是实现策略模式的一种方式。
适配器:
用于调整现有类接口以满足新需求,分为三类:
容器适配器,它们基于现有的容器提供特定接口。
迭代器适配器,改变迭代器的行为(如反向迭代器)。
函数适配器,调整或增强函数对象的行为。
空间配置器:
负责管理内存的分配与释放。
为容器提供了一种机制来获取和管理内存,使得STL能够独立于底层的内存管理机制,并允许用户自定义内存管理策略,以提高效率或满足特殊需求。
STL最核心的就是容器、算法、迭代器
容器:
常用的数据结构:数组、链表、树、栈、队列、集合、映射表等
这些容器分为序列式容器和关联式容器
序列(顺序)式容器:
强调值的排序,序列式容器中的每个元素均有固定的位置
vector: 动态数组,可以在尾部高效地添加或删除元素,支持随机访问。
list: 双向链表,允许在列表的任何位置高效地插入和删除元素,但随机访问较慢。
deque: 双端队列,可以在两端高效地插入和删除,同样支持随机访问,但中间插入删除较慢。
array: 固定大小的数组,是C风格数组的类型安全版本,长度在编译时确定。
forward_list: 单向链表,只支持向前遍历,用于不需要反向遍历的场景,更节省空间。
关联式容器:
二叉树结构体,各元素之间没有严格上的物理上的顺序关系
set: 无重复元素的集合,按照特定的排序规则自动排序元素。
multiset: 类似set,但允许有重复元素。
map: 键值对集合,键唯一,自动排序。
multimap: 类似map,但允许有重复的键。
unordered_set: 类似set,但使用哈希表实现,不保证顺序,查找速度快。
unordered_multiset, unordered_map, unordered_multimap: 分别对应于multiset、map、multimap的哈希版本。
算法:
迭代器:
定义迭代器变量
#include<iostream>
#include<vector>
int main()
{
std::vector <int> v{ 1,2,2 };
std::vector<int>::iterator it ;
//auto it = v.begin();
std::cout << *it << std::endl;
return 0;
}
//输出结果是
1