设为首页 加入收藏

TOP

4.3.2 迭代器的声明
2013-10-07 14:44:50 来源: 作者: 【 】 浏览:51
Tags:4.3.2 声明

4.3.2  迭代器的声明

程序为主人公的物品栏声明了一个向量,然后添加与之前程序相同的3个string对象。在此之后,又声明了一个迭代器。

  1. vector<string>::iterator myIterator; 

这行代码为包含string对象的向量声明了一个名为myIterator的迭代器。如果要声明自己的迭代器,按照下面的模式操作:先写下容器类型,接着是容器包含的对象的类型(用<和>括起来),然后是作用域解析运算符(符号::),最后是iterator和新迭代器的名称。

那么何谓迭代器?迭代器是标识容器中某个特定元素的值。给定一个迭代器,可以访问元素的值;给定正确类型的迭代器,就可以修改其值。迭代器还可以通过常见的算术运算符在元素之间移动。

可以将迭代器想象成贴在容器中某个特定元素上的便签。迭代器虽然不是元素本身,但它是引用元素的一种方式。具体而言,我们可以使用myIterator引用向量inventory中的特定元素。即可将myIterator便签贴在向量inventory中的特定元素上。一旦贴上以后,就能够通过该迭代器访问甚至修改相应元素。

接下来,程序声明了另一个迭代器。

  1. vector<string>::const_iterator iter; 

上面的代码为一个包含string对象的向量创建了名为iter的常量迭代器。除了不能用来修改其引用的元素以外,常量迭代器与常规迭代器几乎一样。由常量迭代器引用的元素必须保持不变。可以将常量迭代器想象成提供了只读访问权限。然而,迭代器自身可以改变。即如果需要,可以让iter在向量inventory之中移动。然而,无法通过iter修改任何元素的值。使用常量迭代器,便签的位置可以改变,但是被便签标记的元素不能改变。

如果常量迭代器是带限制的常规迭代器,为何还要使用它们?首先,这使程序的意图比较清晰。在使用常量迭代器时,很显然不需要修改它引用的元素。其次,这样更加安全。使用常量迭代器能够避免容器元素的意外修改(如果试图通过常量迭代器修改元素,编译器将会报错)。

陷阱

使用push_back()可能使引用向量的所有迭代器无效。

觉得这些关于迭代器的内容太抽象?或是厌烦了便签的比喻?不用担心,接下来我们将真正使用到迭代器。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.3.4 修改向量元素的值 下一篇4.2.10 使用empty()成员函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: