stack翻译为栈,是STL中实现的一个后进先出的容器。要使用 stack,应先添加头文件include
其定义的写法和其他STL容器相同, typename可以任意基本数据类型或容器:
stack<typename> name;
由于栈(stack)本身就是一种后进先出的数据结构,在STL的 stack中只能通过top()来访问栈顶元素。
程序代码:
#include<cstdio>
#include<stack>
using namespace std;
int main(){
stack<int> st;
for(int i=1;i<=5;i++){
st.push(i); //push(i)将i压入栈
}
printf("%d\n",st.top()); //top()取栈顶元素
return 0;
}
运行结果: 5
(1)push()
push(x)将x入栈,时间复杂度为O(1),实例见“ stack容器内元素的访问”。
(2)top()
top()获得栈顶元素,时间复杂度为O(1),实例见“ stack容器内元素的访问”。
(3)pop()
pop()用以弹出栈顶元素,时间复杂度为O(1)。
程序代码:
#include<cstdio>
#include<stack>
using namespace std;
int main(){
stack<int> st;
for(int i=1;i<=5;i++){
st.push(i); //push(i)将i压入栈 ,1 2 3 4 5 依次入栈
}
for(int i=1;i<=3;i++){
st.pop(); //pop()将栈顶元素出栈,即将5 4 3 依次出栈
}
printf("%d\n",st.top()); //top()取栈顶元素
return 0;
}
运行结果:2
(4)empty()
empty()可以检测stack是否为空,返回true为空,返回false为非空,时间复杂度为O(1)。
程序代码:
#include<cstdio>
#include<stack>
using namespace std;
int main(){
stack<int> st;
printf("%d\n",st.empty()); //true=1;false=0
for(int i=1;i<=5;i++){
st.push(i); //push(i)将i压入栈 ,1 2 3 4 5 依次入栈
}
printf("%d\n",st.empty()); //true=1;false=0
return 0;
}
运行结果:1 0
**(5)size() **
size()返回stack内元素的个数,时间复杂度为O(1)。
程序代码:
#include<cstdio>
#include<stack>
using namespace std;
int main(){
stack<int> st;
for(int i=1;i<=5;i++){
st.push(i); //push(i)将i压入栈 ,1 2 3 4 5 依次入栈
}
printf("%d\n",st.size());
return 0;
}
运行结果:5
在使用pop()和top()函数之前必须先使用empty()函数判断栈是否为空。
stack用来模拟实现一些递归,防止程序对栈内存的限制而导致程序运行出错。一般来说,程序的栈内存空间很小,对有些题目来说,如果用普通的函数来进行递归,一旦递归层数过深(不同机器不同,约几千至几万层),则会导致程序运行崩溃。如果用栈来模拟递归算法的实现,则可以避免这一方面的问题(不过这种应用出现较少)。
小勤:上次说可以通过对逆向连接表编辑DAX公式按需要返回模型中的数据(具体见文章《链接回表,让PowerPivot和Excel的互动更加精彩》),具体是怎么弄的?大海:对的。这个说简单也简单,说复杂也复杂。我们先用个简单的例子说明怎么用,以后再用更多的案例来练。在上次我们通过现有连接返回的逆向连接表里,右键单击任意单元格,在弹出的菜单中依次单击“表格”、“编辑DAX”按钮。如下图所示:在弹出的对话框中选择“DAX”,如下图所示: 这样,我们就可以通过写DAX公式来“查询”数据模型里的数据了。比如说通过DAX公式返回“订单”表的数据,在表达式编辑器中输入以下代码: EVALUATE '订单'复制如下图所示:小勤:’订单'就是订单表在数据模型里的表名称吧。但EVALUATE是什么意思?大海:其实就是告诉Excel去执行后续的DAX查询,所有的查询表达式都用EVALUATE开始。小勤:好的。那么如果不只是这样整个表的数据取回来,该怎么办?大海:DAX里提供了很多表筛选、查询等的函数,通过这些函数的配合,就可以实现表的筛选、组合等等功能。先举个简单的例子,比如咱们
使用情景: 之前电脑安装了windows7/Fedora28双系统,由于特殊原因,需要删除windows系统。在格式化硬盘后,我们还需要跟新grub2的启动条目;删除grub启动的界面的windows7选项。解决方法: grub硬盘启动选项由/boot/grub2/grub.cfg决定,所以我们需要更新grub.cfg文件。我们可以手动删除其中的条目,也可以使用专用的命令来进行更新。更新命令为:grub2-mkconfig我们使用man查看grub2-mkconfig的使用方法:NAME grub-mkconfig-GenerateaGRUBconfigurationfile.SYNOPSIS grub-mkconfig[-o|--output=FILE]DESCRIPTION grub-mkconfiggeneratesaconfigurationfileforGRUB.OPTIONS --output=FILE WritegeneratedoutputtoFILE.更新步骤:grub2-mkconfig|less进行先预览内容,然后使用:grub
作者:杨夕、芙蕖、李玲、陈海顺、twilight、LeoLRH、JimmyDU、艾春辉、张永泰、金金金面筋地址:https://github.com/km1994/NLP-Interview-Notes个人笔记:https://github.com/km1994/nlp_paper_study介绍本项目是作者们根据个人面试和经验总结出的自然语言处理(NLP)面试准备的学习笔记与资料,该资料目前包含自然语言处理各领域的面试题积累。目录架构一、【关于基础算法篇】那些你不知道的事【关于过拟合和欠拟合】那些你不知道的事一、过拟合和欠拟合是什么?二、过拟合/高方差(overfiting/highvariance)篇2.1过拟合是什么及检验方法?2.2导致过拟合的原因是什么?2.3过拟合的解决方法是什么?三、欠拟合/高偏差(underfiting/highbias)篇3.1欠拟合是什么及检验方法?3.2导致欠拟合的原因是什么?3.3过拟合的解决方法是什么?【关于BatchNormvsLayerNorm】那些你不知道的事一、动机篇1.1独立同分布(independentandidenticallyd
Thinktwiceinallthings,butthinktwicebeforeyouleap. 凡事要三思,但比三思更重要的是三思而后行。 帮助小伙伴改了一道题,如下:任务:有一个班4个学生,5门课程。求第n门课程的平均分(1<=n<=5);找出有m门以上课程不及格的学生(1<=m<=5),输出他们的学号和全部课程成绩及平均成绩;找出平均成绩在x分以上或全部课程成绩在y分以上的学生,分别编写3个函数实现以上3个要求。样例:学号 成绩1 成绩2 成绩3 成绩4 成绩500190.075.5 80.059.043.0002 88.575.096.057.060.500389.0 87.0 86.090.4100.000498.096.099.085.082.0输入:329085输出:第3门课程的平均分为:90.25有2门以上课程不及格的学生信息为:学号:001全部成绩:90.075.580.059.043.0平均成绩:69.5平均成绩在90分以上的学生为:003004全部课程成绩在85分以上的学生为:003源代码(部分代码来自这位小伙伴哦): #include&
前言在了解了列表和循环的基础上,来试着折腾一下下面的需求。l=[1,2,3,4,5] 取出l的前3个元素l=[1,2,3,4,5] l2=[] i=0 whilei<3: l2.append(l[i]) i+=1 print(l2)复制l=[1,2,3,4,5] l2=[] forxinrange(3): l2.append(l[x]) print(l2)复制print(l[0],l[1],l[2])复制通过上述的三种方法,都可以取得列表的前三个元素,可是用这种方式获取的话,如果取出的个数不是固定的或获取某个范围的的元素就比较麻烦了。切片对于上面的案例我们可以使用Python中的切片操作来完成。print(l[:3]) #输出结果[1,2,3]复制这样就可以轻松取出前三个元素,对于字符串、元祖同样有效。 获取索引1到索引3的元素print(l[1:3]) #输出结果[2,3]复制获取索引-3到最大索引的元素,-3就是倒数第三个元素的索引print(l[-3:]) #输出结果[3,4,5]复制l=list(range(100)) 获取5的倍数print(l[::5]) #输出
Linux平台Oracle19cRAC安装Part3:DB配置四、DB(Database)配置4.1解压DB的安装包4.2DB软件配置4.3ASMCA创建磁盘组4.4DBCA建库4.5验证crsctl的状态Linux平台Oracle19cRAC安装指导: Part1:Linux平台Oracle19cRAC安装Part1:准备工作 Part2:Linux平台Oracle19cRAC安装Part2:GI配置 Part3:Linux平台Oracle19cRAC安装Part3:DB配置本文安装环境:OEL7.6+Oracle19.3GI&RAC四、DB(Database)安装4.1解压DB的安装包oracle用户登录,在$ORACLE_HOME下解压db包(19c的db也是像18c一样直接解压到$ORACLE_HOME下,免安装):[oracle@db193~]$mkdir-p/u01/app/oracle/product/19.3.0/db_1 [oracle@db193~]$cd$ORACLE_HOME [oracle@db193db_1]$pwd /u01/app/oracle/
在JavaScript中,我们通常可以使用如下代码进行函数声明functionexample(paramters){ //函数体 }复制或者varexample=function(paramters){ //函数体 }复制从ES6开始,可以使用箭头函数声明匿名方法,如下varexample=p=>{ console.log(p); }复制我们可以使用babel转译器将ES6代码转译为ES5代码,ES5代码如下varexample=functionexample(p){ console.log(p); };复制 可以看出和普通的函数没有什么不同,但是它们本质上完全不同1.箭头函数不能显式地命名2.箭头函数不能用作构造函数,并且没有prototype属性,这意味着不能使用new关键字3.箭头函数会绑定到所在的词法作用域,不会改变this的指向箭头函数不会创建新的作用域在JavaScirpt中,在一个对象内部,this指向的是这个对象,而在普通函数内部,this指向的是window对象。所以不能在普通函数里面用this来访问对象的属性。在对象内部定义的匿名函数的this指针也是指向wi
作者|WilliamKoehrsen翻译|Mika本文为CDA数据分析师原创作品,转载需授权如果现代工作面试教会了我们什么,那就是关于“你最大的弱点是什么?”这个问题,正确答案是“我工作太努力了。”显然,说出自己的弱点是很可笑的。虽然在个人简历中列出弱点不太好,但是如果不承认自己的不足,我们就无法采取措施改善它们。做出改进的方法很简单:明确现在的位置:找出弱点想变成什么样:制定实现的计划执行计划:一步步改进我们很少能跨越第一步,特别是对于在技术领域工作的人群。我们埋头苦干,不断工作,使用已掌握的技能,而不是学习能让我们工作更轻松或能带来新机会的新技能。自我反省,客观地评估自己,这似乎是一个陌生的概念。但若能够退后一步,弄清我们哪些方面能做得更好,从而在该领域取得进步,这是至关重要的。考虑到这一点,我试着客观地评价自己,并总结了目前自己的三个弱点,改善以下这几点能让我成为更出色的数据科学家:软件工程扩展数据科学深度学习本文中我列出这些弱点主要的目的在于:首先,我非常想提高自己的能力,通过列出自己的不足以及如何解决它们,希望能够激励自己继续学习,完成目标。其次,我希望鼓励其他人思考自己有哪
要不是最近的这么一个广告,我差点就要分不清它到底是叫暴风还是叫风暴了。 记得初识暴风影音还是很多年以前的事,当时在别处的电脑上见了这么一个播放器,其貌不扬,还带点广告什么的。估计是GHOST版系统自带的吧,又或许是名气太大,万能播放,人家就安了。那时候realplayer和暴风算是最常见的播放器了,而射手影音,QQ影音估计还没立项,百度播放器就更不用说了。虽然没怎么接触,但无处不在的广告让我刻骨铭心。 转眼几年就过去了,现在realplayer基本已经销声匿迹,而暴风却还占领了不少的桌面份额。虽然QQ影音也好,射手也罢,估计暴风还是会有自己的用户群的。那年暴风也是大打旗号,宣称消灭不可播文件,一等奖是小轿车吧。最后花落谁家我自没有兴趣,不过凑热闹装上用了一阵子。说实话数年来暴风的UI还是那样子,广告也还是那样子。心一冷,删了。 这番我就不凑热闹了,我知道我向来不爱大众,暴风自然不会出现在我的某个文件夹。不过似乎暴风的一些嗜好却被迅雷播放器给学去了,比如关闭后保留托盘,比如广告,还比如既是本地播放器,也是在线播放器等等。反观一下现在我身边用暴风的几乎没有,或许能说明一些隐性的问题。一个
前面对流程引擎个方面已经有了比较详细的介绍,本篇将最后介绍流程调用的整体解决方案。 在具体项目调用流程引擎之前,我们需要做的是先把流程引擎以及可视化的流程设计器嵌入到自己的项目中,具体的嵌入方式请参考:流程引擎及流程设计器的嵌入方式。 欢迎加入流程交QQ流群:251834323。 一、根据具体项目扩展相关接口 在进行流程调用之前,首先需要根据具体的项目扩展流程引擎公开的相关接口(IPersonList)。此接口的作用为:把具体项目相关的人员信息、部门信息、角色信息等提供给流程引擎调用。 IPersonList接口包含两个方法。GetPersonList及GetGlobalKeyValue,前者扩展的目的为:让流程引擎可以通过调用此方法,获得人员类型ID对应的所有的人员列表。后者扩展的目的为:使具体的人员类型对流程引擎透明化(角色,具体有那些角色、部门,具体有哪些部门等),以便可视化流程设计中对相关人员类型处理。 1usingSystem.Collections.Generic; 2usingWorkflow.Abstract; 3 4namespaceWor
相关资料小程序简易教程https://developers.weixin.qq.com/miniprogram/dev/框架介绍https://developers.weixin.qq.com/miniprogram/dev/framework/MINA.html组件介绍https://developers.weixin.qq.com/miniprogram/dev/component/Apihttps://developers.weixin.qq.com/miniprogram/dev/api/PART1构成小程序包含一个描述整体程序的app和多个描述各自页面的page。一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下:文件必需作用app.js是小程序逻辑(配置第一次打开时,崩溃,后台切换时需要做的逻辑处理)app.json是小程序公共配置(小程序有哪些页面page,窗口的背景/颜色,超时设置等)app.wxss否小程序公共样式表具体每个页面page是由由四个文件组成,分别是:文件类型必需作用js是页面逻辑wxml是页面结构json否页面配置wxss否页面样式表比如整个小
作为一门脱胎于哲学、归依于人性的系统学科,战略绝不是仅仅出一个点子、耍一个花招就解决问题的事情。 所谓战略,就是我们在面临关键阶段的重大抉择时,如何“做正确的事”以及“正确地做事”。 与哲学的认识论、方法论、实践论相似,一个战略目标的实现也应当是三论合一的结果, “做正确的事”属于认识论 “正确地做事”属于实践论 打通两者的正确思维是方法论 知是行之始,行是知之成。“知”既是对事物的认识,也是对方法的认识,“行”既是对方法的推行,也是对认知的践行。 历史的进程一次次表明,无论是在认识世界,还是在改造世界的过程中,既没有脱离认识论的方法论,也没有脱离实践论的认识论。战略“三论”环环相扣、由浅入深,推动战略螺旋式上升,循环往复,直至无穷。 需要说明的是,认识论、方法论、实践论这“三论”之间不是互相割裂的关系,而是相互影响、相互促进的关系, 认识论是方法论的哲学基础 方法论是实践论的技术指导 实践论反过来又修正和完善了认识论与方法论 打个比方,认识论相当于基础科学,方法论相当于技术科学,实践论相当于应用科学。这好比造原子弹,原子弹的爆炸原理是核裂变,是以基础科学中的物理学为理论根基的
文章目录 前言 一、使用预训练网络 二、将VGG16卷积基实例化 三、使用卷积基进行特征提取 1.不使用数据增强的快速特征提取 2.使用数据增强的特征提取 四、微调模型 前言 想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训练网络。预训练网络(pretrainednetwork)是一个保存好的网络,之前已在大型数据集(通常是大规模图像分类任务)上训练好。如果这个原始数据集足够大且足够通用,那么预训练网络学到的特征的空间层次结构可以有效地作为视觉世界的通用模型,因此这些特征可用于各种不同的计算机视觉问题,即使这些新问题涉及的类别和原始任务完全不同。举个例子,你在ImageNet上训练了一个网络(其类别主要是动物和日常用品),然后将这个训练好的网络应用于某个不相干的任务,比如在图像中识别家具。这种学到的特征在不同问题之间的可移植性,是深度学习与许多早期浅层学习方法相比的重要优势,它使得深度学习对小数据问题非常有效。 一、使用预训练网络 使用预训练网络有两种方法:特征提取(featureextraction)和微调模型(fin
此文仅限于搭建authpuppy认证服务器,不包含认证插件等安装,仅说明步骤以备下次安装忘记步骤、耽误时间。 环境:ubuntu10.04 软件版本:authpuppy-1.0.0-stable.tgz 准备工作:ubuntu中安装Apache2,php5,mysql,及postgres。具体的步骤可以去搜下,一般的多是apt-getinstall就OK。postgres安装名为postgresql 具体还可以参照authpuppy官方doc,http://www.authpuppy.org/doc/Getting_Started。这个一定要看!写的很详细。 1.首先在authpuppy官网下载源码http://www.authpuppy.org/。找到download,去下载authpuppy-1.0.0-stable.tgz该版本。 2.将authpuppy-1.0.0-stable.tgz代码解压到/var/www/目录下后,访问http://localhost/authpuppy/web/会访问到preinstall.php,下面开始安装。先按照http://ww
外部排序算法相关:主要用到归并排序,堆排序,桶排序,重点是先分成不同的块,然后从每个块中找到最小值写入磁盘,分析过程可以看看http://blog.csdn.net/jeason29/article/details/50474772 hash值算法 1.题目描述 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 2.思考过程 (1)首先我们最常想到的方法是读取文件a,建立哈希表(为什么要建立hash表?因为方便后面的查找),然后再读取文件b,遍历文件b中每个url,对于每个遍历,我们都执行查找hash表的操作,若hash表中搜索到了,则说明两文件共有,存入一个集合。 (2)但上述方法有一个明显问题,加载一个文件的数据需要50亿*64bytes=320G远远大于4G内存,何况我们还需要分配哈希表数据结构所使用的空间,所以不可能一次性把文件中所有数据构建一个整体的hash表。 (3)针对上述问题,我们分治算法的思想。 step1:遍历文件a,对每个url求取hash(url)%1000,然后根据所取得的值将u
A.Password 两个数\(A\)和\(B\)的排列方法有\(6\)种,所以 答案就是\(C^2_{10-n}\times6\) 顺带复习一下组合数的计算方法 点击查看代码 #include<stdio.h> #include<iostream> #include<cstdlib> #include<string.h> #include<algorithm> usingnamespacestd; typedeflonglongLL; inta[200]; intc[30][30]; intcalc() { for(inti=0;i<=10;i++) { for(intj=0;j<=i;j++) { if(!j)c[i][j]=1; elsec[i][j]=(c[i-1][j]+c[i-1][j-1]); } } return0; } intmain() { intT; scanf("%d",&T); calc(); while(T--) { //fr
IOS开发使用的语言Objective-C(以下简称OBJ-C)是一种扩展自C语言的面向对象语言。在OBJ-C中有一个很重要概念:消息。在最近的学习当中逐渐对消息机制有了一些了解,逐渐体会到了OBJ-C的一些设计理念,同时也更加适应了使用它来编程。面向对象在不同的编程语言的编程语言里面虽然实现的方式不同,但是很多东西都是殊途同归的。以前我习惯用JAVA进行面向对象编程,所以在使用OBJ-C的时候我会用以前JAVA的一些概念来类比。今天主要想说一下自己对OBJ-C里面的一个协议@protocol。我自己的感觉protocol和java里面的interface作用是一样的,用于限定一种特定类的“交流方式”。以前在课堂上看教材上面写的是interface是用来解决JAVA多重继承的问题。对于我来说这不是一个很好的答案,我觉得多重继承基本就是没有用处的(个人理解),因为这样大大加强了类之间的耦合性。而interface更好的用处是规定一组借口调用方式。 在接口里面只有方法的声明不用实现,需要使用这种通信方式的类自己实现其中的方法。这样的话达到了使用统一,功能多样化的目的。而在OBJ-C
QQ群中,有人问文件夹的删除,就上网查了一下,整了个程序,要注意的地方就是,文件夹里面的内容要判断是文件还是子文件夹 贴上源码(有的内容来自网络) importjava.io.File; importjava.io.IOException; publicclassTestFolder{ publicstaticvoidmain(String[]args){ Stringdir="E:/testfile/"; createDir(dir); Stringfilename="test1.txt"; Stringsubdir="subdir"; createDir(dir+subdir); createFile(dir+filename); createFile(dir+subdir+filename); DeleteFolder(dir); } /** *创建文件 *@paramdestFileName *@return */ publicstaticbooleancreateFile(StringdestFileName){
3117高精度练习之乘法 时间限制:1s 空间限制:128000KB 题目等级:黄金Gold 题目描述 Description 给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。 输入描述 InputDescription 读入两个用空格隔开的正整数 输出描述 OutputDescription 输出A*B的值 样例输入 SampleInput 312 样例输出 SampleOutput 36 数据范围及提示 DataSize&Hint 两个正整数的位数不超过500位 #include<iostream> #include<cstring> usingnamespacestd; inta[501],b[501],f[501],lena,lenb,lenc=1,x; charn[501],m[501
先来复习下C++虚函数的特性:①重载函数需要与父类中虚函数的签名相同;②子类中的重载函数是否有virtual标识不影响继承树。按照这些特性,有如下代码 1#include<iostream> 2usingnamespacestd; 3 4classMethObject{ 5 6public: 7virtualdoubleArith()=0; 8virtualvoidPrint()=0; 9}; 10 11classPrintable:publicMethObject{ 12 13public: 14doubleArith()=0; 15voidPrint(){ 16cout<<"Outputis:"<<Arith()<<endl; 17} 18}; 19 20classAdd2:publicPrintable{ 21 22public: 23Add2(doublea,doubleb):x(a),y(b){} 24doubleArith(){returnx+y;} 25 26private: 27doublex,y; 28}; 29 30