C++STL迭代器

STL 的基本组件——迭代器(iterator)
    迭代器是泛化的指针,提供了顺序访问容器中每个元素的方法
    可以使用“++”运算符来获得指向下一个元素的迭代器;
    可以使用“*”运算符访问一个迭代器所指向的元素,如果元素类型是类或结构体,
    还可以使用“->”运算符直接访问该元素的一个成员;
    有些迭代器还支持通过“--”运算符获得指向上一个元素的迭代器;
    迭代器是泛化的指针:指针也具有同样的特性,因此指针本身就是一种迭代器;

    使用独立于STL容器的迭代器,需要包含头文件<iterator>

实例1:输入与输出流迭代器

输入流迭代器
istream_iterator<T>
以输入流(如cin)为参数构造
可用*(p++)获得下一个输入的元素
输出流迭代器
ostream_iterator<T>
构造时需要提供输出流(如cout)

可用(*p++) = x将x输出到输出流

例子:从标准输入读入几个实数,分别将它们的平方输出

#include <iterator>
#include <iostream>
#include <algorithm>
using namespace std;
double square(double x)
{
return x*x;
}
int main()
{
    transform(istream_iterator<double>(cin),istream_iterator<double>(),ostream_iterator<double>(cout,"\t"),square);
    cout<<endl;
return 0;

}

输入1 2 3 然后按ctrl+D,即可得到运行结果为1 4 9


迭代器支持的操作
迭代器是泛化的指针,提供了类似指针的操作(诸如++、*、->运算符)
输入迭代器
可以用来从序列中读取数据,如输入流迭代器
输出迭代器
允许向序列中写入数据,如输出流迭代器
前向迭代器
既是输入迭代器又是输出迭代器,并且可以对序列进行单向的遍历
双向迭代器

与前向迭代器相似,但是在两个方向上都可以对数据 遍历

随机访问迭代器

也是双向迭代器,但能够在序列中的任意两个位置之间进行跳转,如指针、
使用vector的begin()、end()函数得到的迭代器

实例2:输入迭代器、输出迭代器、随机访问迭代器这三个迭代器概念,并编写了一个通用排序算法

#include <iterator>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
template <class T,class InputIterator,class OutputIterator>
void mySort(InputIterator first,InputIterator last, OutputIterator result)
{
vector<T> s;
for(;first!=last;++first)
{
s.push_back(*first);
}
sort(s.begin(),s.end());
copy(s.begin(),s.end(),result);
}
int main()
{
   double a[5]={0.8,0.9,0.6,0.4,0.1};
   mySort<double>(a,a+5,ostream_iterator<double>(cout," "));  
   cout<<endl;
   mySort<int>(istream_iterator<int>(cin),istream_iterator<int>(),ostream_iterator<int>(cout," "));
   cout<<endl;
   return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38211852/article/details/80678124