标准库 标准程序库 C 标准模板库之间是什么关系 (标准库标准程序是什么)
本文目录导航:
C++标准库,标准程序库,标准模板库之间是什么关系
(1)成本:已经作为标准提供,何苦再花费时间、人力重新开发呢;

(2)质量:标准库的都是经过严格测试的,正确性有保证;
(3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平;
(4)良好的编程风格:采用行业中普遍的做法进行开发。
在C++程序设计课程中,尤其是作为第一门程序设计课程,我们注重了语法、语言的机制等方面的内容。
程序设计能力的培养有个过程,跨过基本的原理性知识直接进入到工程中的普遍做法,由于跨度决定了其难度。
再者,在掌握了基本原理的基础上,在认识标准库的问题上完全可以凭借实践,逐步地掌握。
标准库的学习不需要认认真真地读书,需要的是在了解概貌的情况下,在实践中深入。
这个任务就是要知道C++程序设计课程中不讲的,但对程序设计又很重要的这部分内容。
至少我们要能先回答出“有什么”的问题。
一、C++标准库
C++标准库的内容分为10类,分别是(建议在阅读中,将你已经用过或听说过的头文件划出来):
C1. 标准库中与语言支持功能相关的头文件
C2. 支持流输入/输出的头文件
C3. 与诊断功能相关的头文件
C4. 定义工具函数的头文件
C5. 支持字符串处理的头文件
C6. 定义容器类的模板的头文件
C7. 支持迭代器的头文件
C8. 有关算法的头文件
C9. 有关数值操作的头文件
C10. 有关本地化的头文件
C++标准库的所有头文件都没有扩展名。
C++标准库以<cname>形式的标准头文件提供。
在 <cname>形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他名称在std命名空间中声明。
在C++中还可以使用name.h形式的标准C库头文件名。
二、标准模板库STL简介[1]
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。
现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。
在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。
1、算法
函数库对数据类型的选择对其可重用性起着至关重要的作用。
举例来说,一个求方根的函数,在使用浮点数作为其参数类型的情况下的可重用性肯定比使用整型作为它的参数类性要高。
而C++通过模板的机制允许推迟对某些类型的选择,直到真正想使用模板或者说对模板进行特化的时候,STL就利用了这一点提供了相当多的有用算法。
它是在一个有效的框架中完成这些算法的——可以将所有的类型划分为少数的几类,然后就可以在模版的参数中使用一种类型替换掉同一种类中的其他类型。
STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个元素调用指定的函数,stable_sort以你所指定的规则对序列进行稳定性排序等等。
这样一来,只要熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能并大大地提升效率。
算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。
<algorithm>是所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。
<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。
<functional>中则定义了一些模板类,用以声明函数对象。
2、容器
在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。
经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。
STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。
容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。
对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表总结一下它们和相应头文件的对应关系。
3、迭代器
迭代器从作用上来说是最基本的部分,可是理解起来比前两者都要费力一些。
软件设计有一个基本原则,所有的问题都可以通过引进一个间接层来简化,这种简化在STL中就是用迭代器来完成的。
概括来说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。
几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件<utility>,<iterator>和<memory>组成。
<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,<iterator>中提供了迭代器使用的许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。
三、后记
对于STL的使用,也普遍存在着两种观点。
第一种认为STL的最大作用在于充当经典的数据结构和算法教材,因为它的源代码涉及了许多具体实现方面的问题。
第二种则认为STL的初衷乃是为了简化设计,避免重复劳动,提高编程效率,因此应该是“应用至上”的,对于源代码则不必深究。
对于初学者而言,通过分析源代码,提高对其应用的理解其意义也不同凡响。
曾经想着设计几个上机题目,让同学们体会一下利用STL编程。
写出一个适合初学者的,规模又不能太大,还要有足够引导的题目,实在是一件非常费时费力的事,加上有其他事还得应急,就将此帐欠下,日后再说。
要给同学们提的建议是,不少C++的经典教材对STL都有非常好的讲解,可以选一本去读。
在读书时,要开始学着挑着读,跳着读,不必从头到尾,逐页去读。
在这个阶段,可以首先学习迭代器utility、在C++编程中建议替代数组的vector,以及实现双向链表的list。
vector和list与本周任务1和任务2似乎有些相关。
再者,发扬我们一贯特别能实践的精神,及时找些题目或者自编题目进行实践。
VSCode-分文件编写配置和遇到的问题
在进行VSCode配置时,为了实现分文件编写,我们选择创建自定义文件夹结构,包括存放自定义头文件的header文件夹,存放源文件的src文件夹,以及存放exe文件或代码生成文件的output文件夹。
这一步骤需要手动完成,并需注意配置插件时可能导致的配置问题。
若选择使用特定插件生成整个项目,需确保插件配置文件符合需求,具体问题可参考相应链接内容。
配置C++编译环境时,我们需通过快捷键shift + crtl + p打开搜索框,选择编译器,这里推荐使用g++,因其配置较为稳定。
若未显示g++,可能需下载并配置好MinGW环境。
正确配置包含路径为添加的header文件夹。
完成配置后,VSCode会在项目根目录生成文件夹,其中包含c_cpp_文件,用于存放编译环境配置。
在配置文件时,首先在src文件夹中创建文件,通过右上角的调试按钮选择g++,此时代码已运行(若无错误)。
终端会显示输出内容,同时自动生成文件。
为实现代码按照预期运行,需要修改文件,确保输出文件保存至output文件夹。
建议了解${fileDirname}、${fileBasenameNoExtension}和${workspaceFolder}的含义,以便根据个人需求修改文件结构。
编写头文件时,在header文件夹中创建Person.h文件,随后在中包含此文件并创建Person类。
此时,代码运行无误。
配置至此,头文件与源文件分离,include不会报错,且无需修改文件。
然而,在实现头文件中声明的类时,遇到了问题。
在src中创建文件,并实现类的构造和析构函数后,运行代码报错。
点击显示错误信息,发现错误源于头文件与源文件方法的关联问题。
配置文件虽未解决此问题,但需注意后缀名调整为以提高代码规范性。
后续将尝试解决此问题,并感谢社区的详细教程支持。
总结,VSCode的轻便与插件丰富性使得配置过程需自行完成,但这也增加了配置的复杂度。
通过详细的教程,我们能够克服配置挑战,让代码得以运行。
本文作为个人配置学习的记录,虽然对某些原理理解尚不深入,但至少达成了初步运行程序的目标。
期待后续能够进一步优化配置,更规范地实现C++项目。
对于能提供解决方案的大神,诚挚表达感谢。
红头文件的问题文件
问题的“红头文件”都会有具备以下共同特点:一是设定公民义务或剥夺公民权利无法定依据;二是违反国家行政处罚法,擅自设定行政处罚内容或自行规定罚没款的收缴方式;三是无行政审批设定权的机关,擅自设定行政审批事项或增加行政审批环节和条件;四是规范性文件制定技术上不够规范;五是强调管理相对人义务多,规定管理机关责任和制约措施少等。
一是要加大规范文件备案审查法规宣传力度,切实做好“有件必备、有备必审、有错必纠”文章;二是要强化源头治理,有效约束和监督权力,在提高“执行力”上下功夫;三是要加大问责力度,对于滥批乱发违法违规的“红头文件”,用“权力”侵犯“权利”,造成不良社会影响的,应追究主要负责人的责任。
如此,方能使“红头文件”的发布科学规范、严肃公正,提升政府的形象和公信力。
2014年11月18日,中纪委官网刊发文章《正确把握依法治国与依规治党的关系》,文中称:党规必须与国法保持一致。
在实践中,少数“红头文件”作出不适当规定,突破了法律规定,比如,有的文件违法规定税收优惠政策,有的文件违反公务员法有关规定,有的文件明显有地方保护主义之嫌,等等,都通过备案审查机制依法依规予以纠正,以维护法制的统一和权威。
2014年4月16日,有人在湖南红网上发帖称,湖南省双峰县县委、县政府以红头文件的形式,“请求”将涉嫌收购25根象牙的犯罪嫌疑人李定胜取保候审。
网帖称,双峰县企业主李定胜在被抓后,利用关系私下说情,最终让县政府以红头文件的形式,向娄底市委政法委“请求”将已逮捕的李定胜取保候审,理由是如果不放人,会影响企业发展。
这份发给娄底市委政法委的文件显示,2012年11月2日,娄底市公安局经侦支队根据举报,从双峰县国藩工矿、中电机械、湘中农科董事长李定胜家中起获象牙25根,共计172公斤,随后,经侦支队以涉嫌非法经营罪对李定胜实施了刑事拘留。
《刑法》第二百二十五条规定,“非法经营罪”情节严重的处五年以下有期徒刑或者拘役,并处或者单处违法所得一倍以上五倍以下罚金;情节特别严重的,处五年以上有期徒刑,并处违法所得一倍以上五倍以下罚金或者没收财产。
然而,涉及非法收购象牙或象牙制品的行为,最后都是按照“非法收购、运输、出售珍贵濒危野生动物、珍贵、濒危野生动物制品罪”定罪。
《刑法》第三百四十一条规定,“非法收购、运输、出售珍贵濒危野生动物、珍贵、濒危野生动物制品罪”情节严重的,处五年以上十年以下有期徒刑,并处罚金;情节特别严重的,处十年以上有期徒刑,并处罚金或者没收财产。
显然,将此案定性为“非法经营罪”,量刑会轻一些。
在文件中,双峰县表示,李定胜是县里多家企业的董事长,其中有一家还是省重点企业,“如果对李定胜进行长期羁押,势必影响该项目的正常投产,进而影响全县……”此外,双峰县还在文件中表示,李定胜的企业与县里其他企业长期存在资金拆借行为,“任其发展下去极有可能引发重大社会不稳定事件”。
在这份名为《关于请求协调办理李定胜取保候审的紧急报告》中,三家企业称,李定胜是受到蒙骗才收购象牙的,“作为农民企业家,确实是不懂法而不慎犯法”。
和双峰县县委、县政府的文件一样,这份请求文件也提到,由于李定胜被抓,多个企业无法正常运转,而省重点项目国藩重点机械公司现在已经停工,公司的借款也可能会引发高利贷危机。
“如不能在今日给李定胜办妥取保候审,不仅会对本企业集团造成致命打击,也会给相关企业造成重大损失,将对双峰甚至娄底的经济发展、财政税收和社会稳定造成重大影响”。
这份以三家企业名义起草的文件有多达8个印章。
除去上述三家企业的印章外,还有一个是双峰县经济和信息化局的公章,剩下的印章有些模糊,但仍有一个可以看出“双峰县人民……”的字样。
网帖称,事发后,李定胜用做生意积累起的人脉,找到了县里的一个领导,这个领导指示有关部门要想办法将李定胜“救”出来,因为“这种事情,并没有危害到哪个人哪个企业的利益,要想办法保护”。
此后,该领导还亲自拿着报告找到市里的领导说情。
在领导批示后,娄底市公安局将案子移交给双峰县公安局查办。
172公斤象牙,按黑市价格,价值超过百万元,根据《最高人民法院关于审理破坏野生动物资源刑事案件具体应用法律若干问题的解释》,收购价值二十万元以上的就属于“情节特别严重”,《刑法》第三百四十一条规定,可处十年以上有期徒刑,并处罚金或者没收财产。
修订后的《刑事诉讼法》第七十九条规定,对有证据证明有犯罪事实,可能判处十年有期徒刑以上刑罚的,应该逮捕而不能取保候审。
中国政法大学教授洪道德认为,除了法律规定的不可以取保候审的具体类型外,公安机关对是否可以取保候审具有自由裁量权。
但此案中,有证据证明犯罪嫌疑人有犯罪事实,且可以判处十年以上有期徒刑,所以公安机关不可以对犯罪嫌疑人取保候审。
公安机关不能受到政府的干扰,应该依法提请检察院批准逮捕。
当地检察机关应当监督公安机关。
洪道德表示,修订后的《刑事诉讼法》从2013年1月1日起适用,即使是2013年1月1日前发生的案件,也应当按照现有条款执行逮捕。
在双峰县的请示报告上作出批示的,是娄底市市委常委、秘书长王雄,称自己只是希望相关的部门研究一下双峰县的申请,因为被抓的是一个企业家,而这个企业有一定规模,不希望因为这个事情把企业搞垮了。
“我们绝对没有干预办案的意思。
”王雄表示,批示之后,他并没有进一步了解后续的情况。
网帖称,李定胜至今“逍遥法外”。
据了解,该案仍在司法程序中。
2013年李定胜被取保候审,如今一年多过去了,案件已经移交检察院起诉,但至今仍未能开庭。
2015年4月28日,最高法召开新闻发布会公布《最高人民法院关于适用〈中华人民共和国行政诉讼法〉若干问题的解释》,该司法解释包含立案登记制、起诉期限、行政机关负责人出庭应诉等十大方面,其中法院可以直接认定“红头文件”是否合法尤为受到关注。
2014年11月1日,第十二届全国人大常委会第十一次会议通过了关于修改行政诉讼法的决定。
这是行政诉讼法实施24年以来的第一次“大修”。
针对新行政诉讼法增设的新制度、新规定,最高法此次制定了关于适用《中华人民共和国行政诉讼法》若干问题的解释。
焦点 1直接认定“红头文件”合法性规范性文件不合法的,人民法院不作为认定行政行为合法的依据,并在裁判理由中予以阐明。
作出生效裁判的人民法院应当向规范性文件的制定机关提出处理建议,并可以抄送制定机关的同级人民政府或者上一级行政机关。
最高人民法院行政审判庭副庭长李广宇称,行政诉讼法这次修改增加规定,可以一并请求审查规范性文件,这是一个非常大的进步。
“所谓规范性文件,是指俗称的‘红头文件’。
大量的‘红头文件’由于针对不特定的公众能够反复适用,往往涉及面非常广、持续的效力非常久。
而且如果一旦违法,所带来的损害是一个具体的行政行为不能同日而语的。
”不过,这并不意味着当事人可以直接对“红头文件”提起诉讼。
他解释说,由一个具体的个人针对“红头文件”提起诉讼,事实上是行使了公众诉讼的权利,这个诉讼应当属于公益诉讼。
而公益诉讼主张的是公众的普遍利益,但是需要有法律的明确规定。
目前,公益诉讼还没有正式写进行政诉讼法,个人针对抽象行政行为的起诉因此无法纳入受案范围。
焦点 2民告官诉讼法院须受理人民法院对当事人依法提起的诉讼,一律接收起诉状。
能够判断符合起诉条件的,应当当场登记立案;当场不能判断是否符合起诉条件的,应当在接收起诉状后七日内决定是否立案;七日内仍不能作出判断的,应当先予立案。
李广宇介绍,该司法解释把立案登记制摆在了首要位置,第一条就是立案登记制的相关条款。
符合起诉条件的,法院应当当场登记立案。
不过,立案登记并不代表法院对任何一个起诉都要照单全收,对于不符合管辖等法定起诉条件的,在立案阶段可以作出不予立案的裁定。
为了便于当事人寻求救济,该解释还明确,对当事人对不予立案裁定不服的,可以提起上诉。
中国人民大学诉讼制度与司法改革研究中心副主任程雷表示,5月1日立案登记制将在全国范围内实行,预计行政诉讼案件量会有大幅增长。
各级法院的行政庭法官应提前做好准备,提高行政诉讼的立案率,尤其对于目前立案率普遍不高的征地拆迁类行政诉讼,应杜绝以往因案件敏感立案率不高的情况。
焦点 3行政机关正副职应出庭应诉新修改的行政诉讼法首次提出,行政机关负责人出庭应诉制度,被诉行政机关负责人应当出庭应诉,出庭应诉的行政机关负责人应为行政机关的正职和副职负责人,不能出庭的,应当委托行政机关相应的工作人员出庭。
李广宇解释说,行政机关负责人出庭应诉,这在修改前的行政诉讼法里是没有规定的。
从世界各国的行政诉讼法来看,应没有特别要求行政机关的法定代表人必须亲自出庭应诉。
李广宇说,行政机关负责人出庭应诉是行政审判法官和行政机关一起实践探索出来的一个经验,从效果来看非常值得肯定。
比如,它能够解决告官不见官的问题,很多老百姓说行政诉讼是民告官,可是提起这么多诉讼从来没有见过官能够出现在法庭上,首先就使百姓感觉到有那么一些不平等。
行政机关负责人出庭应诉还可以增强行政机关依法应诉的意识,可以提高依法行政的观念。
他说,同时,行政机关负责人出庭还能更直观的了解本机关行政执法的水平,这可能比他的下属给他汇报十次、二十次的效果都更直观。