1:STL概念
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,它提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,(如:向量,链表,队列,栈。)
1.1 容器:
用来管理某一类对象的集合,C++提供了各种不同类型的容器。比如:Dequeue,List, Vector等集合容易。
vector<T> : 一种向量
list<T> : 一个双向链表容器,完成了标准C++数据结构链表的所有功能
queue<T> : 一种队列容器,完成了标准C++数据结构中 队列的所有功能
stack<T>: 一种栈容器,完成了标准C++数据结构中栈的所有功能
deque <T>:双端队列容器,完成了标准 C++ 数据结构中栈的所有功能
priority_queue <T>:一种按值排序的队列容器
set <T>:一种集合容器
multiset <T>:一种允许出现重复元素的集合容器
map <key, val>:一种关联数组容器
multimap <key, val>:一种允许出现重复 key 值的关联数组容器
1.1.1 :容器 Stack例子
#include <iostream>
#include <string>
#include <cstring>
#include <thread>
#include<windows.h>
#include<chrono>
#include<ctime>
#include<mutex>
#include<stack>
int main() {
stack<int> stack; // 定义堆栈对象
for (int i = 0; i < 10; i++)
{
stack.push(i);
}
cout << "开始弹出堆栈的元素";
while (!stack.empty())
{
cout << stack.top()<< " ";
stack.pop();
}
}
打印结国: 开始弹出堆栈的元素9 8 7 6 5 4 3 2 1 0
1.1.2 :Stack实际应用 :
给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格 比如: good good study day day up ---->pu yad yad yduts doog doog
1: 可以使用C++ 头文件 algorithm的 reverse函数
2: 也可以切割字符串,通过 stack 来实现
实现方式一:
int main() {
reverse(str.begin(), str.end());
string reverse_str = str;
cout << "反转的字符串为: " << reverse_str << endl;
}
实现方式二:
int main() {
stack<char> str_stack;
for (int i = 0; i < str.length(); i++)
{
str_stack.push(str[i]);
}
while (str_stack.size() >0)
{
cout << str_stack.top() << "";
str_stack.pop();
}
}
打印结果:反转的字符串为:pu yad yad yduts doog doog
1.1.3 :C++ STL stack容器源码解析
1.2 :案列代码
1.2 算法:
算法作用于容器,他们提供了执行各种操作的方式,包括对容器内容执行初始化,排序,搜索和转换等操作,这些算法在命名空间 std 的范围内定义,通过包含头文件 <algorithm> 来获得使用权
常见的算法包括
- for_each();
- find();
- find_if();
- count();
- count_if();
- replace();
- replace_if();
- copy();
- unique_copy();
- sort();
- equal_range();
- merge();
1.3 迭代器:
迭代器作用于遍历对象集合的元素,这些集合可能时容器,也可能是容器的子集。
2:STL