博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL简介
阅读量:5163 次
发布时间:2019-06-13

本文共 2560 字,大约阅读时间需要 8 分钟。

1、简介

(1)STL 是 C++ 标准程序库的核心。STL 内所有组件都由模板构成,其元素可以是任意类别。

(2)STL译为标准模板库。STL从根本上讲是“容器”的集合,也是组件的集合。

容器包括:list、vector、set、map等,组件包括迭代器、算法等。

(3)STL的算法是标准算法,可以把STL已经定义的算法应用在容器的对象上。

2、组成构件

STL 的组件中最主要的是容器、迭代器、算法和仿函数。

(1)容器:用来管理某类对象的集合

(2)迭代器:用来在一个对象群集的元素上进行遍历动作

(3)算法:用来处理群集内的元素

3、基本结构

STL 是 C++ 通用库,由容器、算法、迭代器、仿函数和内存配置器组成。

(1)容器

Vector<T>,是一种向量

List<T>,是一种双向链表容器

Queue<T>,是一种队列容器

Stack<T>,是一种栈容器

Deque<T>,是双端队列容器

Set<T>,是一种集合容器

Map<key,val>,是一种关联数组容器

(2)算法

STL提供了非常多的数据结构算法。

这些算法在命名空间std的范围内定义,通过包含头文件<algorithm>来获得使用权。

STL中所有的算法都是基于模板实现的。

(3)迭代器

通俗的讲,迭代器就是指示器,能够使程序反复对数据进行访问,为访问数据提供了通用的接口,类似于C++的指针。包括:

a、输入迭代器:为程序需要的数据源提供接口,只能从一个序列读取数值,可修改可引用

b、输出迭代器:只能向一个序列写入数据,可修改,可引用

c、双向迭代器:可读可写,可进行前项、后项操作

d、随机接入迭代器:可通过跳跃的方式访问任意数据,是功能最强大的迭代器

(4)仿函数

STL包含了大量仿函数。仿函数可以理解为函数的一般形式。仿函数有几种不同的约束,对于编程来说,仿函数非常重要。

在标准C++规范中,函数调用一般使用指针,当需要调用函数时,只需要告诉函数的地址即可。

(5)内存配置器

STL包括了底层的内存分配和释放。

STL提供3种容器配接器

a、Statck
b、Queue
c、Deque

示例代码:

#这里以stack为例,运行环境:CFree(比VS轻量,运行速度快,学习算法推荐使用这个工具)#include 
#include
using namespace std;int main(){ //定义堆栈对象 stack
st; for(int i=0;i<10;i++){ //将数据压入堆栈 st.push(i); } while(!st.empty()){ //如果st非空即可持续访问其中的数据 //弹出堆栈第一个元素并输出 cout<
<<" "; //弹出堆栈元素 st.pop(); } cout<

运行结果:

4、特点

优点:

(1)代码易读性强;

(2)STL集成了优秀的算法,熟悉使用可以提高开发效率;精通STL后,可以自己用模板去设计实现自己的算法和数据结构。

缺点:

(1)STL和其他的类库的接口不太方便;

例如在VCL和MFC中,都有自己的string类型,CString和AnsiString,其余接口如果使用字符串,肯定是使用自己的原生类型,然而为了设计可移植的程序,有可能将平台独立的部分用STL实现,这样导致了在两部分合作时存在大量的转型动作,而且必须付出额外的转型动作,例如std::string和CString/AnsiString没有直接的转型方法,因此必须通过char *作为转型的媒介。

(2)STL没有提供object persistent.(?)

查语法错误不方便,由于广泛使用模板,编译器的提示信息总是千奇百怪,让人摸不找头脑。调试极不方便,Watch窗口的监视功能等于虚设.还要自己编写代码来查看容器内容.尤其是跟踪到STL内部之后,更让人晕头转向。

5、编程概述

#以矢量Vector为例#include 
#include
using namespace std;//使用命名空间std//定义矢量对象vector
ratings(5);int n; int main(){ //输入矢量的大小 cin>>n; //定义矢量动态内存 vector
scores(n); }#include
#include
#include
using namespace std;//使用命名空间stdconst int NUM=5;//定义矢量对象/*vector
ratings(5);int n; */int main(){/* //输入矢量的大小 cin>>n; //定义矢量动态内存 vector
scores(n); */ //定义矢量对象 vector
names(NUM); vector
sexs(NUM); cout<<"Please do exactly as told.you will enter\n"<
<<"Personal name ,Their sex.\n"; int i=0; //输入信息 for(i-0;i
>sexs[i]; //等待 cin.get(); } cout<<"you enterd the following:\n"<

运行结果:

转载于:https://www.cnblogs.com/yedushusheng/p/5520008.html

你可能感兴趣的文章
我回答了90%的面试题,为什么还被拒?
查看>>
Html - Table 表头固定和 tbody 设置 height 在IE不起作用的解决
查看>>
20165205 学习基础与C语言基础调查
查看>>
iOS SVN终端指令
查看>>
Linux如何更新软件源
查看>>
SQL使用CASE 语句
查看>>
day8 (异常处理和网络编程)
查看>>
php中函数 vsprintf() 和 var_export()
查看>>
多线程(1)—单线程
查看>>
HTML5权威指南 16.拖放API与通知API
查看>>
NYOJ-289 苹果 又是一个典型的01背包和上题一样没啥好说的
查看>>
HDU 2262 回溯算法 递归枚举
查看>>
九度0J 1374 所有员工年龄排序
查看>>
listview初始化后仍为空
查看>>
无刷新分页
查看>>
SIFT算法
查看>>
git各种撤销操作
查看>>
每天努力一点之SQL
查看>>
UINavigationBar-使用总结
查看>>
夺命雷公狗jquery---11属性操作
查看>>