关于其他stl

集合 set

STL 在头文件 <set> 中提供了一个有序集合 set,其中的元素全部是唯一的,并且插入进的元素自动按照升序排列,但 set 不支持通过下标定位某个元素,只能通过迭代器遍历。

以下代码声明了一个 int 类型的集合。

std::set<int> s;

使用 insert() 在集合中加入一个元素,其时间复杂度为O(logn)。

使用 erase() 删除集合中某个元素某个位置的元素,其时间复杂度均为O(logn)。

set 自身提供 lower_bound() 用于定位元素,其作用与前文中的同名函数类似,也可以使用find() 来精确查找元素。

遍历 set 只能使用迭代器set 的迭代器为 set<T>::iterator,其中 T 为元素类型。

std::set<int> s;

s.insert(23333);
s.insert(23333); // 重复插入无效
s.insert(66666);
s.insert(890);
s.insert(-1);
// s.size() = 4, s = { -1, 890, 23333, 66666 }

s.erase(66666);
// s.size() = 3, s = { -1, 890, 23333 }

std::set<int>::iterator p1 = s.lower_bound(555);
// *p1 = 890

std::set<int>::iterator p2 = s.find(555);
// p2 = s.end(),因为未找到 555

s.erase(p1);
// s.size() = 2, s = { -1, 23333 }

for (std::set<int>::iterator p = s.begin(); p != s.end(); p++) {
    printf("%d\n", *p);
}
// 依次输出 -1、23333

上述代码中运用的迭代器的方法在 STL 容器中较为常见。

字符串 string

STL 在头文件 <string> 中将一些与字符串有关的操作封装在了 string 内。

使用 cin 和 cout 来输入、输出字符串。

使用 find() 查找另一个字符串在该字符串中的出现位置,返回结果从 0 开始。

使用 c_str() 获得 string 对应的 const char * 类型数据,可用于向 C 库函数传递。

std::string s = "_Lyx";

int pos = s.find("23333");
// pos = string::npos,因为没有找到 23333

pos = s.find("yx");
// pos = 3,因为出现位置为第 4 个字符

char ch = s[0];
// ch = 'L'

std::cout << s << std::endl;
puts(s.c_str());
// 输出两次 

队列 queue

STL 在头文件 <queue> 中提供了先入先出(FIFO)队列 queue

使用 push() 向队列中加入元素。

使用 front() 获取队首元素(并不删除)。

使用 pop() 删除队首元素。

使用 empty() 判断队列是否为空。

std::queue<int> q;

bool flag = q.empty();
// flag = true,队列初始为空

q.push(23333);
q.push(66666);

while (!q.empty()) {
    printf("%d\n", q.front());
    q.pop();
}
// 依次输出 23333,66666

栈 stack

STL 在头文件 <stack> 提供了后入先出(LIFO)栈 stack

使用 push() 向栈中加入元素。

使用 top() 获取栈顶元素(并不删除)。

使用 pop() 删除栈顶元素。

使用 empty() 判断栈是否为空。

std::stack<int> s;

bool flag = s.empty();
// flag = true,栈初始为空

s.push(23333);
s.push(66666);

while (!s.empty()) {
    printf("%d\n", s.top());
    s.pop();
}
// 依次输出 66666,23333

优先队列 priority_queue

STL 在头文件 <queue> 中提供优先队列 priority_queue,在任意时间都能取出队列中的最大值

使用 push() 向优先队列中加入元素,其时间复杂度为O({\log}n)O(logn)。

使用 top() 获取优先队列中最大的元素(并不删除),其时间复杂度为O(1)O(1)。

使用 pop() 删除优先队列中最大元素,其时间复杂度为O({\log}n)O(logn)。

使用 empty() 判断优先队列是否为空。

std::priority_queue<int> q;

bool flag = q.empty();
// flag = true,优先队列初始为空

q.push(23333);
q.push(-1);
q.push(66666);

while (!q.empty()) {
    printf("%d\n", q.top());
    q.pop();
}
// 依次输出 66666,23333,-1

priority_queue 默认提供队列中的最大值,也可以以以下声明方式让 priority_queue 提供最小值

std::priority_queue<T, std::vector<T>, std::greater<T> > q;

注意把三个 T 换成优先队列中元素的类型(如 int);std::greater<T> 的右边要加一个空格,否则会被编译器误认为是 >> 右移运算符。

内容概要:本文档详细介绍了如何在MATLAB环境下实现CNN-GRU(卷积门控循环单元)混合模型的多输入单输出回归预测。项目旨在通过融合CNN的局部特征提取能力和GRU的时序依赖捕捉能力,解决传统序列模型在处理非线性、高维、多输入特征数据时的局限性。文档涵盖了项目背景、目标、挑战及其解决方案,强调了模型的轻量化、高效性和可视化全流程追踪等特点。此外,还提供了具体的应用领域,如智能电网负荷预测、金融时间序列建模等,并附有详细的代码示例,包括数据加载与预处理、网络结构定义、训练选项设置、模型训练与预测以及结果可视化等步骤。; 适合人群:对深度学习有一定了解,特别是对时间序列预测感兴趣的科研人员或工程师。; 使用场景及目标:①需要处理多输入单输出的非线性回归预测任务;②希望在MATLAB平台上快速实现并优化深度学习模型;③寻求一种高效、轻量且具有良好泛化能力的预测模型应用于实际场景中,如智能电网、金融分析、交通流量预测等领域。; 阅读建议:由于文档内容涉及较多的技术细节和代码实现,建议读者先熟悉CNN和GRU的基本概念,同时掌握MATLAB的基础操作。在阅读过程中,可以结合提供的代码示例进行实践操作,以便更好地理解和掌握CNN-GRU混合模型的构建与应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值