C++ learing process STL

本文介绍了C++中的STL(标准模板库),它包括容器、迭代器、算法和函数对象。通过示例展示了如何使用vector容器,并用迭代器进行元素遍历和排序。迭代器作为STL的重要组成部分,提供了类似指针的功能,但更适用于对象容器的遍历。此外,还讨论了begin和end操作在迭代器中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STL
标准模板库;
将算法从特定的数据结构中抽象出来;
C++的模板为泛型程序设计奠定了关键的基础;
STL是泛型程序设计的一个范例,由一些可适应不同需求的集合类以及在这些数据集合上操作的算法构成:
容器:管理某类对象的集合;
迭代器:对对象集合上进行遍历;
算法:处理集合内的元素
函数对象;

向量(Vector)使用

#include
#include
using namespace std;
vector num;//STL中的vector容器
int element;
//从标准输入设备读入整数,
//直到输入的是非整型数据为止
while(cin>>element)
num.push_back(element);
//STL中的排序算法
sort(num.begin(),num.end());

#include
using namespace std;

#include

void print_vector(const vector& coll)
{
cout << "coll.capacity() "<<coll.capacity() << endl;//容量
cout << "coll.size() " <<coll.size() << endl;
}
int main()
{
vector coll;//动态数组
print_vector(coll);
for(int i = 0; i< 10; i++)
{
coll.push_back(i);//添加元素
}
cout << coll[9] << endl;
print_vector(coll);
return 0;
}

迭代器是面向对象版本的指针
1、指针可以志向内存中的一个地址;
2、迭代器可以指向容器中的一个位置,用来遍历STL容器中的全部或者部分元素。

STL的每一个容器类模板中,都定义了一组对应的迭代器类
在这里插入图片描述

获得迭代器:
所有容器都提供获得迭代器的函数
在这里插入图片描述

所有容器都提供两种迭代器:
1、Container::iterator以“读写”模式遍历元素;
2、Container::const_iterator以“只读”模式遍历元素;

Vector的迭代器 vector::iterator iter;
这条语句定义了一个名为iter的遍历,它的数据类型是由vector定义的iterator类型。

Vector的begin和end操作
如果容器中有元素的话,由begin返回的迭代器指向第一个元素:
vector::iterator iter = ivec.begin();
由end操作返回的迭代器指向vector的“末端元素的下一个”。通常称为超出末端迭代器。

#include
using namespace std;

#include

void show_array(const vector& array)
{
vector::const_iterator iter;
cout << “array[”;
for(iter = array.begin(); iter != array.end(); ++iter)
{
cout << *iter << “,”;
}
cout << “]” << endl;
}

int main()
{
vector array;

vector<int>::iterator iter; //迭代器,vector内部类
vector<int>::const_iterator citer;

array.push_back(42);
array.push_back(1);
array.push_back(100);

array.pop_back();

iter = array.begin();
cout<< *iter <<endl;

*iter = 109;

citer = array.begin();
cout << *citer << endl;

show_array(array);


return 0;

}

vector迭代器的自增和解引用运算
for(vector::iterator iter = ivec.begin();iter!=iver.end(); ++iter)
*iter = 0; //将iterator指向的元素设为0

### 关于Q-Learning航迹预测算法实现 #### Q-Learning算法原理 Q-Learning是一种无模型的强化学习方法,旨在通过试错的方式找到最优的行为策略。该算法的核心在于更新Q函数,即评估采取某个行动后的预期回报。具体来说,对于每一个状态\(S\)和动作\(A\)组合,Q值按照如下方式更新: \[ Q(S,A) \leftarrow (1-\alpha)Q(S,A)+\alpha[R+\gamma max_{a'}Q(s',a')] \] 其中,\(\alpha\)是学习率参数决定了新获得的信息覆盖旧信息的程度;\(R\)代表即时奖励;\(\gamma\)表示折扣因子用于衡量未来奖励的重要性[^3]。 #### UAV路径规划中的应用 在无人机(UAV)路径规划场景下,环境被离散化成多个网格单元格构成的状态空间。每个状态下UAV可以选择不同的飞行方向作为动作集的一部分。利用上述提到的Q-Learning机制,经过多次探索后,系统逐渐学会避开障碍物并朝着目标前进的最佳路线。当遇到新的未知区域时,它仍然可以根据已学得的知识做出合理决策[^2]。 #### 代码实例:MATLAB中基于Q-Learning的三维航迹规划 下面给出一段简化版的伪代码片段展示了如何使用MATLAB编写一个简单的Q-Learning框架来进行无人机的三维航迹规划: ```matlab % 初始化参数 numEpisodes = 100; % 训练轮数 epsilon = 0.9; % 探索概率 alpha = 0.8; % 学习速率 gamma = 0.95; % 折扣系数 % 定义状态空间与动作集合 statespace = generateStateSpace(); % 创建状态空间矩阵 actionset = {'up','down','forward','backward','left','right'}; qTable = zeros(size(statespace,1),length(actionset)); for episode=1:numEpisodes currentStateIndex = randi([1,size(statespace,1)]); % 随机初始化起始位置 while ~isGoalReached(currentStateIndex) if rand() < epsilon || sum(qTable(currentStateIndex,:))==0 actionIdx = randsample(1:length(actionset),1); else [~,actionIdx]=max(qTable(currentStateIndex,:)); end nextStateIndex = getNextStateIndex(currentStateIndex,actionset{actionIdx}); reward = getReward(nextStateIndex); qTable(currentStateIndex,actionIdx)=... (1-alpha)*qTable(currentStateIndex,actionIdx)+ ... alpha*(reward + gamma*max(qTable(nextStateIndex,:))); currentStateIndex = nextStateIndex; end end ``` 此段程序仅作为一个概念验证性质的例子,并未考虑实际工程实施过程中可能涉及到的具体细节处理如碰撞检测、边界条件判断等问题[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值