【C++】STL标准模板库(Iterator迭代器常用操作举例说明)

❥ 主要用作自己复习,外加经验交流分享,每日一更 

背景

库是一系列程序组件的集合,可以在不同的程序中重复使用。ANSI C++中包含了一个C++ STL(Standard Template Library),即C++标准模板库(C++泛型库),它在std命名空间中,定义了常用的数据结构和算法,使用起来十分方便。

STL的代码从广义上大致分为三类:算法(algorithm)、容器(container)和迭代器(iterator)。我们一直都在大量地使用标准函数库,所有数学函数、字符串操作函数和输入/输出实现程序都使用那些经过见证的非常好的具有可重用性的算法。

熟悉STL之后,就会发现以前写过的许多“复杂有趣功能”的代码,现在只需要短短几行就能代替了。通过调用算法模板,就可以得到一些高效的代码,更好地完成需要的功能。

下面主要介绍C++ STL中各种常用的容器、迭代器和算法。


iterator迭代器

1、介绍

迭代器在STL中起着粘合剂的作用,用来将STL的各个部分结合在一起。它也是一种检查容器内元素并遍历元素的数据类型。C++更趋向于使用迭代器而非下标操作,因为 标准库为每一种标准容器(如vector)定义了一种迭代器类型,只有少数容器(如vector)支持下标操作访问容器元素

2、定义和初始化

每种容器都定义了自己的迭代器类型,如vector:

vector::iterator it; //定义一个名为 it 的变量

每种容器都定义了一对名为 begin 和 end 的函数,用于返回迭代器。

下面对迭代器进行初始化操作:

vector ivec;
vector::iterator it1 = ivec.begin(); //将迭代器it1指向ivec容器的第一个元素
vector::iterator it2 = ivec.end();   //将迭代器it2指向ivec容器的最后一个元素的下一个位置

注意:end并不指向容器的任何元素,而是指向容器的最后元素的下一位置,称为超出末端迭代器。如果vector为空,则begin返回的迭代器和end返回的迭代器相同。一旦像上面这样定义和初始化,就相当于把该迭代器和容器进行了某种关联,就像把一个指针初始化为某一空间地址一样。

3、常用操作

先声明了一个vector的 ivec 容器,下面用迭代器来遍历 ivec 容器,把其每个元素重置为0

vector ivec;
vector::iterator it;
for(it = ivec.begin(); it != ivec.end(); ++it)
{
    *it = ();
}

在C++定义的容器类型中,只有 vector 和 queue 容器提供迭代器算术运算和除!=和==之外的关系运算:

it ± n     //在迭代器上 加上/减去 整数n,将产生指向容器中 前面/后面 第 n个元素的迭代器
           //新计算出的迭代器必须指向容器中的元素或超出容器末端的下一个元素
it1 ±= it2 //将it1 加上/减去 it2的运算结果赋给it1
           //两个迭代器必须指向容器中的元素或超出容器末端的下一个元素
it1-it2    //两个迭代器相减得出两个迭代器的距离,必须指向容器中的元素或超出容器末端的下一个元素
>,>=,<,<=  //元素靠后的迭代器大于靠前的迭代器,必须指向容器中的元素或超出容器末端的下一个元素

你可能感兴趣的:(C++,c++,数据结构,开发语言,stl)