简介
STL(Standard Template Library)是C++标准库的一部分,提供了丰富的数据结构和算法。
1.vector
vector是一种动态数组,可以自动调整其大小。
在图论中的应用:
vector可以用作邻接表来存储图。
定义:
std::vector<类型名> 变量名;
- 类型名可以是基本类型(如
int、char),也可以是自定义类型(如struct)。 - 定义二维
vector:std::vector<std::vector<int>> name; std::vector<int> array[SIZE];- 前者一维和二维的长度都可以动态增加。
- 后者只有二维的长度可以增加。
访问方式:
- 下标访问:
ve[i] - 迭代器访问:
std::vector<类型名>::iterator it = v.begin(); for (int i = 0; i < v.size(); i++) { std::cout << it[i] << " "; }- 更常见的用法:
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) { std::cout << *it << " "; }
- 更常见的用法:
常用函数:
push_back():向vector末尾插入元素。pop_back():从vector末尾弹出元素。size():返回vector中元素的数量,时间复杂度为O(1)。clear():清空vector。insert():在指定位置插入元素,insert(pos, x)。erase():删除指定位置或区间的元素,erase(pos)。
为什么使用vector?
- 在处理一组长度未知的数据时,
vector可以动态调整大小,减少空间占用。
2.set
set是一个内部自动有序且不含重复元素的容器。
定义:
std::set<类型名> 变量名;
元素访问:
set只能通过迭代器访问。std::set<类型名>::iterator it; for (std::set<int>::iterator it = st.begin(); it != st.end(); ++it) { std::cout << *it << " "; }
常用函数:
insert():插入元素。find():查找元素,返回该值在容器内的迭代器。erase():删除单个元素或一个区间的所有元素。- 删除单个元素:
st.erase(it); - 删除一个区间:
st.erase(it, st.end()); - 删除指定值的元素:
st.erase(st.find(value));
- 删除单个元素:
size():返回set中元素的数量。
为什么使用set?
- 当需要对一组数据进行去重并排序时,
set是一个非常有用的数据结构。
3.string
string是一个字符串类,提供了丰富的字符串操作方法。
定义:
std::string 变量名;
常用函数:
append():追加字符串。substr():获取子字符串。length()或size():返回字符串的长度。empty():检查字符串是否为空。erase():删除指定位置或区间的字符。find():查找子字符串的位置。replace():替换指定位置的子字符串。
为什么使用string?
- 提供了丰富的字符串操作方法,方便处理文本数据。
4.map
map是一个关联容器,存储键值对,并按键自动排序。
定义:
std::map<键类型, 值类型> 变量名;
元素访问:
- 通过键访问值:
int value = m[key]; - 使用迭代器访问:
for (std::map<int, int>::iterator it = m.begin(); it != m.end(); ++it) { std::cout << it->first << " " << it->second << std::endl; }
常用函数:
insert():插入键值对。find():查找键,返回迭代器。erase():删除单个键值对或一个区间的所有键值对。size():返回map中元素的数量。
为什么使用map?
- 当需要存储键值对并按键自动排序时,
map是一个非常有用的数据结构。
5.queue
queue是一个先进先出(FIFO)的容器适配器。
定义:
std::queue<类型名> 变量名;
常用函数:
push():将元素推入队列。pop():移除队列的第一个元素。front():返回队列的第一个元素。back():返回队列的最后一个元素。empty():检查队列是否为空。size():返回队列中元素的数量。
为什么使用queue?
- 当需要实现先进先出的数据结构时,
queue是一个理想的选择。
6.priority_queue
priority_queue是一个优先队列,元素按照优先级顺序排列。
定义:
std::priority_queue<类型名> 变量名;
常用函数:
push():将元素推入优先队列。pop():移除优先队列的第一个元素。top():返回优先队列的第一个元素。empty():检查优先队列是否为空。size():返回优先队列中元素的数量。
为什么使用priority_queue?
- 当需要按优先级处理元素时,
priority_queue是一个非常有用的数据结构。
7.stack
stack是一个后进先出(LIFO)的容器适配器。
定义:
std::stack<类型名> 变量名;
常用函数:
push():将元素推入栈。pop():移除栈顶元素。top():返回栈顶元素。empty():检查栈是否为空。size():返回栈中元素的数量。
为什么使用stack?
- 当需要实现后进先出的数据结构时,
stack是一个理想的选择。
8.pair
pair是一个包含两个元素的简单结构体。
定义:
std::pair<类型1, 类型2> 变量名;
常用操作:
- 访问元素:
pair<int, int> p = {1, 2}; int first = p.first; int second = p.second;
为什么使用pair?
- 当需要存储两个相关联的元素时,
pair是一个简洁而有效的方式。
9.algorithm
algorithm库提供了一系列通用算法,用于处理各种容器。
常用算法:
sort():对容器进行排序。reverse():反转容器中的元素。find():查找特定元素。count():计算特定元素的数量。max_element()和min_element():找到最大和最小元素。accumulate():累加元素。
为什么使用algorithm?
- 提供了丰富的通用算法,简化了常见的编程任务。
Comments NOTHING