- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
STL的介绍及queue,vector
STL简介
作为一个C++程序设计者,STL是一种不可忽视的技术。
Standard Template Library (STL):标准模板库,更准确的说是 C++ 程序设计语言标准模板库。STL是所有C++编译器和所有操作系统平台都支持的一种库,说它是一种库是因为,虽然STL是一种标准,也就是说对所有的编译器来说,提供给C++程序设计者的接口都是一样的。也就是说同一段STL代码在不同编译器和操作系统平台上运行的结果都是相同的,但是底层实现可以是不同的。 令人兴奋的是,STL的使用者并不需要了解它的底层实现。 试想一下,如果我们有一把能打开所有锁的钥匙,那将是多么令人疯狂啊。
STL的目的是标准化组件,这样你就不用重新开发它们了。你可以仅仅使用这些现成的组件。STL现在是C++的一部分,因此不用额外安装什么。它被内建在你的编译器之内。
2.????? 为什么我们需要学习STL
STL是 C++的ANSI/ISO 标准的一部分,可以用于所有C++语言编译器和所有平台(Windows/Unix/Linux..)。STL的同一版本在任意硬件配置下都是可用的;
STL 提供了大量的可复用软件组织。例如,程序员再也不用自己设计排序,搜索算法了,这些都已经是STL的一部分了。嘎嘎,有意思吧。
使用STL 的应用程序保证了得到的实现在处理速度和内存利用方面都是高效的,因为STL设计者们已经为我们考虑好了。
使用STL编写的代码更容易修改和阅读,这是当然的啦。因为代码更短了,很多基础工作代码已经被组件化了;
使用简单,虽然内部实现很复杂。
虽然,STL的优点甚多,但是STL的语法实在令初学者人头疼,许多人望而却步。可是STL是每个C++程序设计者迟早都要啃的一块骨头。
3.????? 初识STL
下面让我们来看几段代码吧:
#include iostream
int main(void)
{
??? double a[] = {1, 2, 3, 4, 5};
??? std::coutmean(a, 5)std::endl;??? // will print 3
??? return 0;
}
好懂吧,除了那个std有点让人不舒服以外,这是一段普通的没有使用STL的C++代码。
再看下面一段:
#include vector
#include iostream
int main()
{
??? std::vectordouble a;
??? a.push_back(1);
??? a.push_back(2);
??? a.push_back(3);
??? a.push_back(4);
??? a.push_back(5);
??? for(int i = 0; i a.size(); ++i)
{
??????? std::couta[i]std::endl;
??? }
??? return 0;
}
如果你真的没有接触过STL的话,你会问,呀,vector 是啥呀?这是一段纯种的STL代码,看到尖括号了吧,知道那是模板了吧。看到a.push_back(5)、a.size()你不感觉奇怪么?可是我们并没有定义这些函数啊。
#include vector
#include iostream
int main()
{
??? std::vector int q;
??? q.push_back(10);
??? q.push_back(11);
??? q.push_back(12);
??? std::vector int v;
??? for(int i=0; i5; ++i){
??????? v.push_back(i);
??? }
??? std::vectorint::iterator it = v.begin() + 1;
??? it = v.insert(it, 33);
??? v.insert(it, q.begin(), q.end());
??? it = v.begin() + 3;
??? v.insert(it, 3, -1);
??? it = v.begin() + 4;
??? v.erase(it);
??? it = v.begin() + 1;
??? v.erase(it, it + 4);
??? v.clear();
??? return 0;
}
这一段你又看到了新东西了吧:iterator、insert、erase、clear。不罗嗦了,等你看完这篇文章,回头再看就简单了。
关于模板的其他细节,读者可以参阅《C++ Templates 中文版》在这里,简单的介绍一下模板类和函数模板的概念。
模板是C++中实现代码重用机制的一种工具,可以实现类型参数化,把类型定义为参数。函数模
您可能关注的文档
- 在仪器驱动开发中使用VISA格式化IO.doc
- 乔治马丁一个改变流行音乐的人.doc
- 电影的早期历史_The_history_of_motion_pictures_.doc
- TSM常用控制台命令.docx
- Open Question分类.doc
- 大学生英语第一册知识点整理.doc
- 概一句话简答完整版.doc
- delphi、SQL制作图书管理系统.doc
- 23诵读经典传承文明.doc
- 小汤三教学方法及重点.docx
- 《JJF 2132-2024荧光紫外灯人工气候老化试验装置校准规范:辐射照度参数》.pdf
- JJF 2120-2024轮速传感器校准规范.pdf
- 计量规程规范 JJF 2120-2024轮速传感器校准规范.pdf
- 《JJF 2129-2024钙钛矿太阳电池校准规范:光电性能参数》.pdf
- JJF 2129-2024钙钛矿太阳电池校准规范:光电性能参数.pdf
- 《JJF 2120-2024轮速传感器校准规范》.pdf
- JJF 2117-2024沥青混合料理论最大相对密度仪校准规范.pdf
- JJF 2116-2024特定蛋白分析仪校准规范.pdf
- 《JJF 2116-2024特定蛋白分析仪校准规范》.pdf
- 计量规程规范 JJF 2117-2024沥青混合料理论最大相对密度仪校准规范.pdf
文档评论(0)