C++容器和迭代器(一)——基础概念

来源:互联网 发布:java小写字母转大写 编辑:程序博客网 时间:2024/06/05 13:28

首先根据《C++ Primer》的介绍,C++定义了一个内容丰富的抽象数据类型标准库(STL)。标准库定义了许多容器类以及一系列泛型算法。

标准库为每一种标准容器定义了一种迭代器类型。 

迭代器是一种检查容器内元素并遍历元素的数据类型。迭代器是一种对象,使用它可方便地对容器中的元素进行遍历。迭代器与内置指针很相似,都提供了一种访问和操纵容器中元素的方便途径

需注意的是,有许多用作迭代器的类型在概念上是相关的,若一种类型支持一组确定的操作(这些操作可用来遍历容器内的元素,并访问这些元素的值),就称为迭代器。

《C++ Primer》中的一些概念:

1.每种容器类型都定义了自己的迭代器类型。

2.每种容器都定义了一对命名为beginend的函数,用于返回迭代器。

3.迭代器类型定义了一些操作来获取迭代器所指向的元素,并允许程序员讲迭代器从一个元素移动到另一个元素(如自增操作符和解引用操作符)。

4.另一对可执行于迭代器的操作是比较:==和!=,作用是比较两个迭代器:如果两个迭代器对象指向同一个元素,则它们相等,否则不相等。

5.每种容器还定义了一种名为 const_iterator的类型,只用于读取容器内的元素,但不能改变其值。

 

每种容器类型都提供若干共同工作的迭代器类型,与容器类型一样,所有迭代器具有相同的接口:如果某种迭代器支持某种操作,那么支持这种操作的其他迭代器也会以相同的方式支持这种操作。

常用迭代器运算:

*iter

Iter ->mem

++ iter

Iter ++

--iter

Iter--

Iter1 == iter2

Iter1 != iter2


C++定义的容器类型中,只有vector和deque容器提供以下两种重要的运算集合:

迭代器算数运算

除了==和!=之外的关系操作符来比较两个迭代器

(关系操作符只适用于vector和deque容器,是因为只有这两种容器为其元素提供快速,随机的访问。它们确保可根据元素位置直接有效的访问指定的容器元素。这两种容器都支持通过元素位置实现的随机访问,因此它们的迭代器可以有效的实现算数和关系运算)

list容器的迭代器既支持算术运算,也支持关系运算,它只提供前置和后置的自增自减和相等运算。



迭代器范围

C++语言使用一对迭代器标记迭代器范围:这两个迭代器分别指向同一个容器中的两个元素或超出末端的下一个位置(first,last)。


一些容器操作会修改容器的的内在状态或移动容器内的元素,这样的操作使所有指向被移动的元素的迭代器失效,也可能同时使其他迭代器失效,使用无效迭代器没有意义,可能会导致与悬垂指针相同的问题。例如,每种容器都定义了一个或者多个erase函数,这些函数提供了删除容器元素的功能,任何指向已删除元素的迭代器都具有无效值。







 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击