简介
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