
文章目录
🌸作者简介:花想云,在读本科生一枚,致力于 C/C++、Linux 学习。
🌸本文收录于 C++系列,本专栏主要内容为 C++ 初阶、C++ 进阶、STL 详解等,专为大学生打造全套 C++ 学习教程,持续更新!
从本章开始,我们就正式进入C++STL的学习了。首先我们来认识一下什么是STL以及它的重要性并了解它的缺陷。当然关于STL中更多细节的知识我们将会在后续的文章中逐渐渗透。

STL代表标准模板库(Standard Template Library),是C++标准库的一部分,提供了许多通用的数据结构和算法。STL的设计目标是提供高效、可重用和可靠的代码,以简化C++程序的开发和维护。
STL包含许多容器类,如向量(vector)、链表(list)、映射(map)和集合(set),这些容器类可用于存储和管理不同类型的数据。此外,STL还提供了算法类,例如排序、查找和遍历等,这些算法可应用于各种不同的容器类。
STL是C++中非常重要和强大的工具之一,它已经被广泛使用和证明其效果,并成为了许多开发人员的首选库之一。
原始版本
Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP 版本–所有STL实现版本的始祖。
P. J. 版本
由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。
RW版本
由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一般。
SGI版本
由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们后面学习STL要阅读部分源代码,主要参考的就是这个版本。
STL(Standard Template Library)是C++标准库中的一部分,由以下六个组件组成:
容器(Containers):包括向量(vector)、链表(list)、队列(queue)、栈(stack)、集合(set)和映射(map)等数据结构,用于存储和组织数据。
迭代器(Iterators):用于遍历容器中的元素,提供了一种统一的方法来访问容器中的数据。
算法(Algorithms):包括查找(find)、排序(sort)、计数(count)和变换(transform)等常用算法,用于对容器中的数据进行操作和处理。
函数对象(Function Objects):是一种重载了函数调用运算符的类,可以像函数一样被调用,常用于算法中进行比较和运算操作。
适配器(Adapters):包括迭代器适配器(iterator adapters)和函数适配器(function adapters)等,用于将迭代器或函数的接口转换为另一种接口。
分配器(Allocators):用于在容器中动态分配和释放内存,提供了一种可定制的内存管理机制,可以满足不同的内存需求。
这六个组件共同构成了STL的基本框架,提供了一种高效、可重用和可靠的编程方式,使得C++程序的开发和维护变得更加简单和快速。
学习STL(Standard Template Library)的重要性在于:
提高代码质量和效率:STL包含了许多高效和可靠的数据结构和算法,可以帮助开发人员编写更好的代码,提高程序的质量和效率。
降低开发成本:由于STL已经实现了许多通用的数据结构和算法,开发人员不需要从头开始编写代码,可以大大降低开发成本和时间。
提高代码可重用性:STL提供了一种通用的编程模式,使得代码更容易被重用和维护。
提供了标准化的接口和实现:STL已经成为C++标准库的一部分,提供了一套标准化的接口和实现,使得开发人员可以跨平台和跨编译器使用STL。
促进程序员的学习和发展:学习STL需要掌握一些基本的编程概念和技术,这有助于促进程序员的学习和发展。
网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构
以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。
总之,学习STL对于C++程序员来说是非常重要的,它不仅可以提高代码的质量和效率,而且可以降低开发成本和提高代码的可重用性,同时也可以促进程序员的学习和发展。
更新太慢了。这个得严重吐槽,上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。加锁。且锁的粒度是比较大的。复杂。比如类型萃取,迭代器萃取。vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的。
点击下方个人名片,可添加博主的个人QQ,交流会更方便哦~
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳