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. Spring Data Jpa Specification 调用Oracle 函数/方法

    开发框架用的Jpa,数据库是 Oracle. 在开发中难免会遇到需要数据库字段是字符串格式,但是又需要对其进行范围查询(数据库设计问题,后续应避免).那么问题来了, Jpa Specification ...

  2. [RH134] 12-系统启动

    1.系统启动流程 开机--->BIOS自检(需要检测的设备是否正常)--->磁盘的MBR分区--->BootLoader(引导加载器)加载内核--->识别各分区的文件系统 2. ...

  3. 【Spring注解开发】组件注册-使用@Configuration和@Bean给容器中注册组件

    写在前面 在之前的Spring版本中,我们只能通过写XML配置文件来定义我们的Bean,XML配置不仅繁琐,而且很容易出错,稍有不慎就会导致编写的应用程序各种报错,排查半天,发现是XML文件配置不对! ...

  4. 温故知新-java的I/O模型-BIO&NIO&AIO

    文章目录 摘要 传统的BIO编程 伪异步I/O编程 NIO编程 AIO编程 几种IO模型的对比 netty 参考 你的鼓励也是我创作的动力 Posted by 微博@Yangsc_o 原创文章,版权声 ...

  5. Android事件传递机制总结

    Android中控件的分类 Activity dispatchTouchEvent(MotionEvent e) onTouchEvent(MotionEvent e) ViewGroup(View) ...

  6. 解Bug之路-记一次JVM堆外内存泄露Bug的查找

    解Bug之路-记一次JVM堆外内存泄露Bug的查找 前言 JVM的堆外内存泄露的定位一直是个比较棘手的问题.此次的Bug查找从堆内内存的泄露反推出堆外内存,同时对物理内存的使用做了定量的分析,从而实锤 ...

  7. centos 7 c++连接mysql的常用函数说明及使用样例

    以下函数使用之前需安装mysql,并包含mysql.h头文件,设置好mysqlclient动态库 一.mysql_init() MYSQL * mysql_init(MYSQL *mysql); // ...

  8. ServiceStack.Redis 5.8 版本去掉每小时 6000 次访问限制

    ServiceStack.Redis这个官方 Redis 访问组件从4.0版本后开始商业化了,在使用的时候会有很多限制: 1.类型限制 类型限制是20,这个组件自带序列化功能,使得我们可以直接把对象保 ...

  9. Php7安装pdo_pgsql,pgsql扩展

    通过地址http://pecl.php.net/package/PDO_PGSQL下载PDO扩展包 找到php自带的ext目录里的pgsql库 第二步: 切换目录到pgsql 第三步: 找到phpiz ...

  10. 03 . Jenkins构建之代码扫描

    Sonar简介 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar可以集成不同的测试工具,代码分析工具,以及持续集成工具.与持续集成工具(例如 Hudson/Jenkins 等)不 ...