📜  C++ STL中的迭代器(1)

📅  最后修改于: 2023-12-03 14:39:53.103000             🧑  作者: Mango

C++ STL中的迭代器

迭代器(iterator)是C++ STL标准模板库中很重要的概念,在STL中有着广泛的应用。迭代器可以被用于访问容器中的元素,就像指针一样,它可以指向容器中的某个位置并访问该位置的值。在C++中,所谓的“迭代器”,实际上就是STL容器类中的一种轻量级的对象,负责对容器中的元素进行遍历和访问。

迭代器的种类

在STL标准中,使用迭代器将容器类与算法分离,使得用户可以按照自己的需求使用搭配好的迭代器与算法组合,完成各种遍历操作。STL中的迭代器分为五种,从使用频率由高到低排列分别是:

  1. 前向迭代器(Forward Iterator)
  2. 双向迭代器(Bidirectional Iterator)
  3. 随机访问迭代器(Random Access Iterator)
  4. 输入迭代器(Input Iterator)
  5. 输出迭代器(Output Iterator)
前向迭代器

前向迭代器是支持++操作符的迭代器,可以实现向前遍历容器中的元素。记住,由于这种迭代器每次只能向前移动一位,因此在操作完成后,不能返回原来的位置。

双向迭代器

双向迭代器是支持++和--操作符的迭代器,可以实现向前或向后遍历容器中的元素。在使用双向迭代器遍历完容器中的所有元素后,可以返回到原来的位置。

随机访问迭代器

随机访问迭代器是支持加、减、乘、比较运算符的迭代器,可以计算迭代器之间的距离,根据偏移量访问容器中的元素。太强了!

输入迭代器

输入迭代器用来遍历容器时,仅对元素进行读取。例如,从文件中读取数据可以用输入迭代器。

输出迭代器

输出迭代器用来遍历容器时,仅对元素进行赋值。例如,将数据写入一个文件时,可以用输出迭代器。

迭代器的使用

在STL中,不同的容器类所支持的迭代器类型是不同的。例如,vector 、list 、deque容器支持双向迭代器,unordered_map容器支持输入迭代器,而array容器则支持随机访问迭代器。

因此,在使用迭代器访问容器时,需要根据容器类型正确选择对应的迭代器类型。常用的迭代器操作包括以下几种:

  1. 迭代器的解引用操作
  2. 迭代器的++操作
  3. 迭代器的--操作
  4. 迭代器的算术运算
  5. 迭代器间的比较与等于运算

下面是使用迭代器实现打印vector中的元素的例子:

#include<iostream>
#include<vector>
using namespace std;

int main(){
    vector<int> vec{0,1,2,3,4,5};
    vector<int>::iterator iter;     //定义一个迭代器iter
    for(iter=vec.begin();iter!=vec.end();iter++){
        cout<<*iter<<" ";           //使用迭代器解引用打印元素
    }
    cout<<endl;
    return 0;
}

通过以上代码,我们可以看到,使用迭代器可以很方便的遍历容器中的所有元素并将其输出。

总之,学习迭代器是C++ STL中的一个非常重要的知识点,也是成为一个高级程序员必须掌握的技能。迭代器是STL标准模板库中重要的概念,掌握了迭代器,对于STL容器的使用将得心应手,相信在你未来的编程生涯中,一定会受到STL迭代器的重要启示,创造出更加优秀的程序!