学习STL 做个简单的笔记

 

STL 的一个重点 数据结构和算法分离

STL的算法由模版函数提供,另一个特点,它不是面向对象的,主要依赖模版,具有广泛通用性的底层特征

内联函数使得生成的代码短小高效

不依赖于任何特定的数据类型

三个基本的STL组件:

1》迭代器:提供了访问容器对象的方法

2》容器:一种数据结构,以模版类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代期

3》算法:用来操作容器中的数据的模版函数。

STL头文件和容器类

#include    Container Class

<deque>       deque

<list>            list

<map>     map,multimap

<queue>   queue,priority_queue

<set>         set,multiset

<stack>       stack

<vector>      vector,vector<bool>

名字空间: using namespace std;

迭代器

迭代器提供了对一个容器的对象的访问方法,并且定义了容器中对象的访问范围。如同指针

但不一定具有地址值

创建迭代器:1》作为变量创建。2》为了使用一个特定的类型的数据而创建一个迭代器

提示:STL不保证可以从另一个迭代器来抵达一个迭代器

迭代器的类型

对于STL数据结构和算法,分为5种类型

1》Input iterators  提供对数据的只读访问

2》Output  iterators 提供对数据的只写访问

3》Forwar iterators 提供读写操作,并能向前推进迭代器

4》Bidirectional iterators 提供读写操作,并能向前和向后操作

5》Random  access  iterators 提供读写操作,并能在数据中随机移动

上面的可以用下面的代替

指针迭代器

一个指针也是一种迭代器,

#include<iostream.h>

#include<algorithm>   //没有.H后缀

using namespace std;// 引入命名空间

#define SIZE  100

int iarray[SIZE];

int main()

{

iarray[20]=50;   //数组第20 赋值为50

int *ip=find(iarry,iarry+SIZE,50); find()函数接收3个参数,头两个表示搜索范围,iarray 指向数组第一个元素,第二个参数iarray+SIZE等同于past-the-end

//也就是最后一位,第三个带定位的值也就是50,find函数返回和前两个参数相同类型的迭代器,这里是指向整数德 指针IP

if(ip==iarry+SIZE)

cout<<"50 not found in array "<<endl;

else

cout<<*ip<<"found in array"<<endl;

return  0;

}

提示

必须记住STL使用模版,因此STL函数自动根据他们使用的数据类型来构造

用法必须符合STL迭代器的规则  不能判断返回值是否为NULL

容器迭代器

与指针迭代器不同,使用容器类方法获取迭代器对象  两个典型的容器类方法,begin(),end()

它们在大多数容器中表示整个容器的范围,其他一些容器还是用rbegin(),rend()提供反向迭代器,以按反向顺序指定对象范围

下面的程序创建一个矢量容器(STL的和数组等价的对象),并使用迭代器在其中搜索

#include<iostrream.h>

#include <algorithm>

#incclude<vector>

using namespace std;

vector<int >intVector(100);

void main()

{

intVector[20]=50;

vector<int>::iterator intIter=find(intVector.begin(),intVector.end(),50);

if(intVector!=intVector.end())

cout<<"Vector contains value"<<*intIter<<endl;

else

cout<<"Vector does not contain 50"<<endl;

 

}

常量迭代器

和指针一样,你可以给一个迭代器赋值。例如,首先声明一个迭代器

vector<int >::iterator first;

该语句创建一个vector<int >类的迭代器。下面的语句将迭代器设置到intVector的第一个对象,并将它指向的对象值设置为123

first=intVector.begin();

*first=123;

这种赋值对于大多数容器类都是允许的,除了只读变量

为了防止出错可以申请为

const vector<int>::iterator result;

result=find(intVector.begin(),intVector.end(),value);

if(result!=intVector.end())

*result=123;        

警告

另一种防止数据被改变的方法是将容器声明为const类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值