vector常用函数:

(1)a.size();//返回a中元素的个数;

(2)a.push_back(5);//在a的最后一个向量后插入一个元素,其值为5

(3)a[i]; //返回a的第i个元素,当且仅当a[i]存在

(4)a.empty();//判断a是否为空,空则返回ture,不空则返回false

(5)a.clear();//清空a中的元素

(6)a.back();//返回a的最后一个元素

(7)a.erase(a.begin()+1,a.begin()+3);//删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)

(8)a.insert(a.begin()+1,5);//在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4

(9)a.insert(a.begin()+1,3,5);//在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5

(10)a.insert(a.begin()+1,b+3,b+6);//b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8,插入元素后为1,4,5,9,2,3,4,5,9,8

(11)a.pop_back();//删除a向量的最后一个元素

(15)a.capacity();//返回a在内存中总共可以容纳的元素个数

添加:vector作为形参时的使用方法

1.fun(vector<int>a) //传值

调用:fun(a)

发生拷贝构造

2.fun(vector<int>&a)//传引用

fun(a)

不发生拷贝构造(改变原有vector)

3.fun(vector<int>*a)//传指针

fun(&a)

不发生拷贝构造(改变原有vector)

2,3区别不知道。。。只是引用指针区别? 知道了再改

堆常用函数:

1.先建立vector<int> nums = {9, 6, 2, 4, 7, 0, 1, 8, 3, 5};

make_heap(nums.begin(), nums.end(), less<int>());(堆首为最大值)

或make_heap(nums.begin(), nums.end(), greater<int>());(堆首为最小值)

2.更新堆(貌似不建立,直接push——heap也行)

nums.push_back(10);

push_heap(nums.begin(), nums.end(), less<int>());

3.删除堆首元素:pop_heap()  注意:先pop_heap(),vector后pop_back():

pop_heap(nums.begin(), nums.end(), less<int>());

nums.pop_back();

原理:堆其实就是把vector内的元素最大值或最小值转移到nums[0]上。而pop_heap()是将nums[0]放到堆尾部,继而调用vector清除队尾

问题:push_heap()并没有传递指针这一类的东西,怎么做到改变vector的?nums.begin()传的可能是地址?

最后附上一道剑指offer题目:数据流中的中位数

void Insert(int num)
{
int k=max.size()+min.size();
//数组进前两个元素
if(k<){
//max.push_back(num);
//前两个不需要建堆
if(k==){
max.push_back(num);
}
if(k==){
if(num>max[]){
int tmp;
tmp=max[];
max[]=num;
min.push_back(tmp);
return;
}
min.push_back(num);
}
}
//自前两个元素开始//保证大堆永远仅比小堆大1或0
//所有元素判断是否比小堆(从大到小3 2 1)min[0]还小,小的话进小堆,通过倾倒机制保证小堆一直比大堆小0或1
//若不比小堆min[0]小,则 进大堆(从小到大4 5 6),大堆有倾倒机制保证大堆一直比小堆大0或1
//倾倒机制:(若大堆元素比小堆大两个则分一个给小堆,或小堆比大堆大时把min[0]放入大堆)
if(k>){
//元素判断是否比小堆(从大到小3 2 1)min[0]还小
if(num<min[]){
//小的话开始处理
min.push_back(num);
int flag=min.size()-max.size();
if(flag>){
//把min[0]拿到max[0]位置上了
max.push_back(min[]);
pop_heap(min.begin(),min.end(),less<int>());
min.pop_back();
push_heap(max.begin(),max.end(),greater<int>());
}
}
//不小则进大堆通过倾倒机制分配
else{
max.push_back(num);
push_heap(max.begin(),max.end(),greater<int>());
int pool=max.size()-min.size();
if(pool>){
//当max数量较min大2时,开始倾倒
min.push_back(max[]);
pop_heap(max.begin(),max.end(),greater<int>());
max.pop_back();
push_heap(min.begin(),min.end(),less<int>());
}
}
return;
}
} double GetMedian()
{
int k1=max.size();
int k2=min.size();
//大堆比小堆多1时。直接返回max[0]
if(k1>k2){
return max[];
}
else{
double avg=(max[]+min[])/2.0;
return avg;
}
}
vector<int>max;
vector<int>min;

内容参考:

1.https://www.jianshu.com/p/13a56502e217

2.https://blog.csdn.net/rxm1989/article/details/39549689

3.https://www.nowcoder.com/ta/coding-interviews?asc=true&order=difficulty

C++中vector和堆的常用使用方法&例题:数据流中的中位数的更多相关文章

  1. js中关于string的一些常用的方法

    最近总结了一些关于string中的常用方法, 其中大部分的方法来自于<JavaScript框架设计>这本书, 如果有更好的方法,或者有关于string的别的常用的方法,希望大家不吝赐教. ...

  2. 介绍web开发中实现会话跟踪的常用技术方法

    由于http是无状态的协议,这种特性严重阻碍了客户端与服务器进行动态交互,例如购物车程序,客户在购物车中添加了商品,服务器如何知道购物车已有的物品呢?为了支持客户端与服务器之间的交互,为了弥补http ...

  3. js中__proto__, property, prototype, 对象自身属性方法和原型中的属性方法的区别

    __proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性 ...

  4. C++stl中vector的几种常用构造方法

    #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #i ...

  5. C++晋升之std中vector的实现原理(标准模板动态库中矢量的实现原理)

    我们实现的数据结构是为了解决在执行过程中动态的开辟空间使用(比如我们不停的输入,输入的多少我们不确定) 假设当你看到这篇文章的话,就当作是零食咀嚼,营养没有有BUG,能够直接看我博客中文章:CPU对内 ...

  6. Java中正则表达式的使用(常用的方法)

    这两天回想了一下正则表达式的使用,顺便就总结了一下java的javascript中使用正则表达式的用法,需要看javascript中使用正则的朋友可以看我的另一篇总结,下面我就简单的介绍一下java中 ...

  7. 分布式web架构中对session同步的常用处理方法以及优缺点

    写在前面 最近在读一本来自淘宝技术团队大牛的书,名字叫<大型网站系统与Java中间件实践>.开篇的章节详细地介绍了一个网站架构由小变大不断演进的过程,其中从单机架构升级到集群架构的过程中着 ...

  8. js中的BOM和DOM常用事件方法

    笔记: window对象 ● window.innerHeight - 浏览器窗口的内部高度 ● window.innerWidth - 浏览器窗口的内部宽度 ● window.open() - 打开 ...

  9. JavaScript中的window对象的属性和方法;JavaScript中如何选取文档元素

    一.window对象的属性和方法 ①setTimeout()方法用来实现一个函数在指定毫秒之后运行,该方法返回一个值,这个值可以传递给clearTimeout()用于取消这个函数的执行. ②setIn ...

随机推荐

  1. java实现串的反转

    串的反转 反转串 我们把"cba"称为"abc"的反转串. 求一个串的反转串的方法很多.下面就是其中的一种方法,代码十分简洁(甚至有些神秘),请聪明的你通过给出 ...

  2. java代码(12) ---CollectionUtils工具类

    CollectionUtils工具类 CollectionUtils工具类是在apache下的,而不是springframework下的CollectionUtils 个人觉得在真实项目中Collec ...

  3. 来看看阿里架构师Java 代码打日志姿势!你也是这样写的吗

    使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一. 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能 ...

  4. Zookeeper实现服务注册/发现

    what that? Zookeeper在分布式开发中使用频繁,但许多框架都对其进行了封装,初学者可能无法较好的理解其工作原理,该文章演示了使用Zookeeper实现服务注册,服务发现的简单demo, ...

  5. Flask 的配置文件

    Flask 的配置文件 四种方法给 Flask 做配置 1直接给 app 对象赋值属性 以字典的形式,给flask做配置 以文件的形式,给flask做配置(django 就是用这种) 以类的形式,给f ...

  6. [CF453D]Little Pony and Elements of Harmony

    题目   点这里看题目. 分析   设\(count(x)\)为\(x\)的二进制中\(1\)的个数.因此\(f(u,v)=count(u\oplus v)\)   看一看每次转移,我们发现最不友好的 ...

  7. @codefoces - 566E@ Restoring Map

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 对于一棵 n 个点的树,我们称两个点是相邻的当且仅当两个点的距离 ...

  8. 关于微信小程序的文档-手撸

    学习小程序的人如果有vue基础的话应该有很好的帮助作用.没有也关系,反正很简单. 首先理解一个完整的小程序app都有什么页面: pages页面放置所有的页面文件. 一个完整的小程序页面文件包括: in ...

  9. (八)postman请求的form-data、x-www-form-urlencoded、raw、binary的区别

    原文链接:https://blog.csdn.net/jiadajing267/article/details/87883725 1.form-data 等价于http请求中的multipart/fo ...

  10. MongoDB——基本使用及集群搭建

    文章目录 什么是MongoDb? 基本概念 与关系型数据库的比较 Mongo的高效性 文件存储 基本使用 启动/连接服务 基础操作命令 高可用集群搭建 概念 环境准备 实践 应用场景 总结 什么是Mo ...