STL学习1——简介

STL:标准模板库介绍

三个概念:容器(模板化的数据结构),迭代器,算法


容器简介:

1.分类
序列容器(线性的)
vector:向量
list:双链表
deque:队列
关联容器(非线性的)
set:快速搜索,不可重复
multiset:快速搜索,可重复
map:一对一映射不可重复,快速基于键的搜索
multimap:一对多映射可重复,快速基于键的搜索
容器适配器(非线性的)
stack
queue
priority_quene

2.函数
常见函数:
empty,insert,size,各种operator,swap
只出在第一类容器的函数:
max_size , begin , end , eares , clear , rbegin , rend


迭代器简介:

1.介绍:
1.可以把迭代器想成指针,*和++运算。迭代器针对容器而言。
2.容器的end和begin函数操作都返回一个迭代器,指向容器的最后一个元素的下一个(并不存在的)和第一个元素。
3.可以定义iterator类型对象来引用一个可以修改的容器元素,利用const_iterator类型对象引用一个不可以修改的容器元素。

2.example:利用istream_iterator,ostream_iterator输入输出

    istream_iterator<int> inputV(cin);//定义输入迭代器对象inputV,从cin中提取int值
    int number1 = *inputV; //从cin流中读取第一个值,inputV相当于指向输入流的指针
    ++inputV;//指向下一个输入流中下一个数
    int number2 = *inputV;//读取cin流中下一个数

    ostream_iterator<int> outputV(cout);//它可以在cout对象中插入int值,并将它输出到cout
    cout << "this sum is:" << endl;
    *outputV = number1 + number2;//相当于用cout输出了,要是想再输出,需要++coutputV

3.迭代器列别和层次
1.每个容器支持的迭代器类别,决定了它是否可以使用STL中特定算法。
2.层次:输入,输出——>前向——>双向——>随机访问
第一类:vector,deque:随机访问;list:双向
第二类:双向
第三类:没有


算法简介:

类的开发者将算法作为容器的成员函数,算法与容器关联。算法通过迭代器操作容器中元素,可以用于不同的容器


干货

关于迭代器和容器难懂和晦涩的地方:
一、
容器就是数据结构的泛指,迭代器就是指针的泛指,可以指向元素。容器相当于一个储藏柜,里面装的许多不同的物品就像是储存的元素,比如面包、啤酒、苹果、现金。要取得各个物体就得用与各个物体向匹配的工具,如取出面包要用盘子、取出啤酒要用杯子、取出苹果要用篮子、取出现金要用钱包。迭代器的作用就相当于取出物品的工具的抽象,通过迭代器泛指现实生活中从贮藏室中取出物体的工具。C++迭代器是一种检查容器内元素并遍历元素的数据类型。

把原来的数组,链表,二叉树等等泛型成了容器,把对数组操作的下标,对链表操作的指针等等泛型成了迭代器。可以类比用指针操作链表也就是用迭代器操作容器。
虽然++,*意义都是相同,但他们的底层操作其实不同,是靠重载实现的

二、容器的迭代器类型
每种容器类型都定义了自己的C++迭代器类型,
如 vector:vector<int>::iterator iter;这符语句定义了一个名为 iter 的变量,它是 int型向量的 迭代器类型。每个标准库容器类型都定义了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义相同。 begin 和 end 操作每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素:

vector<int>::iterator iter = ivec.begin(); //vector<int>相当于一个类,这个类是向量型的,且向量里存放的是整数;

上述语句把 iter 初始化为由名为 vector 操作返回的值。假设 vector 不空,初始化后,iter 即指该元素为ivec[0]。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值