stl

本文详细介绍了 C++ STL 中 vector、map、优先队列和 set 的使用方法及常见函数,包括数据的增删改查、排序和遍历等,并提供了具体的代码示例。

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

1 vector:不定长数组

1.1 vector是在不知道数组需要多大规模下使用的。与数组相同,vector<int>,vector<string>,vector<自定义类型>都是可以的。同时可以声明二维数组vector<int>a[maxn],vectoe<int*>a;三维数组vector<int>a[maxn][maxn],vector<int**>a。依次类推

1.2 常见的函数用法例如:vector<int>c

c.clear():清楚容器中的所有数据

c.empty():判断容器是否为空,空就返回真值

c.erase(pos):删除pos位置的数据

c.erase(beg,end):删除[beg,end)区间的数据

c.front():传回第一个数据

c.insert(pos,elem):在pos位置处插入元素elem

c.pop_back():删除最后一个元素

c.push_back(elem):在尾部加入一个元素elem

c.resize(num):重新设置容器的大小为num

c.size():返回容器的大小c[i].size()返回二维中每一维的大小

c.begin():返回指向容器第一个元素的迭代器

c.end():返回最后一个元素+1的迭代器指针

1.3遍历元素

可以直接for(int i=0;i<c.size();i++) 用c[i]来进行访问

也可以for(vector<int>iterator::it=c.begin();it!=c.end();it++) 用*it进行访问

1.4扩展

reverse(c.begin(),c.end());将vector中的数据进行翻转

sort(c.begin(),c.end(),cmp):对元素进行排序

2 map 实现二叉搜索树的功能:插入某个数值,查询某个数值,删除某个数值

2.1 map能够实现数据的一 一映射,但是第一关键字只能有一个。比如说学生的学号和姓名存在一一映射的关系,那么可以有map<int,string>student来表示。map内部是由一颗红黑树实现的,自动实现排序功能。(按照第一关键字进行排序)

2.2 map存数据的一种最简单的方式

map<int,int>a;

a[1]=4;

a[2]=3;

可以用上述方式进行存储。如果再出现一个a[1]=9;会覆盖原来的a[1]=4

2.3 map的大小

可以用int size=a.size()的方式获取map的大小

2.4 map的遍历

map<int,int>::iterator it;

for(it=a.begin();it!=a.end();it++)

  cout<<it->first<<" "<<it->second<<endl;

2.5 map中的查找

可以使用find函数,find函数的返回值是一个迭代器,如果没有找到,返回的是end的迭代器

2.6 map的清空和

a.clear()清空map中的所有元素,a.empty()判断map是否为空

2.7 map的删除

 可以先找到关键字的迭代器,删除此迭代器;也可以直接删除元素

it=a.find(1);

a.erase(it);

直接删除元素a.erase(1)

删除整片的元素a.earse(mapStudent.begin(), mapStudent.end());

2.8如果元素是结构体,需要重载运算符才能排序

Typedef struct tagStudentInfo

{

       Int      nID;

       String   strName;

       Bool operator < (tagStudentInfo const& _A) const

       {

              //这个函数指定排序策略,按nID排序,如果nID相等的话,按strName排序

              If(nID < _A.nID)  return true;

              If(nID == _A.nID) return strName.compare(_A.strName) < 0;

              Return false;

       }

}StudentInfo, *PStudentInfo;  //学生信息

3 优先队列 :可以实现堆的功能,插入元素,取出最大或最小的元素

优先队列与普通队列的区别在于,普通队列按照先进先出的顺序,优先队列则是按照某种权值。默认的是权值最大的会先出队列,也就是队首到队尾是从大到小排序的。但是很多情况我们不是按值进行比较的,或者不是从大到小的,这时候就需要重载运算符或者重写cmp函数

3.1 

priority_queue<int>p;

p.push(4);

p.push(1);

p.push(2);

p.push(3);

int m=p.size();

while(m--)

  cout<<p.top();

  p.pop();

struct info{

int val,pos;

}

bool operator<(info a,info b)

  return a.val<=b.val;

3.2 如果想要从小到大排,要重新写下cmp

struct cmp{

  bool operator()(const int &a,const int &b)

    return a>b;//a>b是从小到大排,a<b是从大到小排。

}

priority_queue<int,vector<int>,cmp>p

4 set

set用来存储同一种数据类型的集合,且每个数据只有唯一的一个值。set还可以根据元素的值自动的排序

常用操作:

//插入元素

s.insert(1);

s.insert(3);

//查找元素

set<int>::iterator ite;

ite=s.find(1);//返回的是指针

if(ite==s.end()) puts("not found")

//删除元素

s.erase(2);

s.erase(ite);//删除指针处的元素

s.erase(ite1,ite2);//删除两个指针间的所有元素

//遍历所有元素

lower_bound(key):返回第一个大于等于key的位置

upper_bound(key): 返回第一个大于key的位置

//

s.count(3):用来查找某个元素出现的次数











内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值