何时使用常量迭代器(const_iterator)

ZDNet软件频道 时间:2003-10-17 作者:ZDNet China |  我要评论()
本文关键词:cpptips
你是否疑惑,为什么C++标准化委员会使用常量迭代器(const_iterator)代替常量迭代型(const iterator)?为什么不用const_iterator代替 const iterator ?
本文译自Builder.com,未经许可请勿转载你是否疑惑,为什么C++标准化委员会使用常量迭代器(const_iterator)代替常量迭代型(const iterator)?为什么不用const_iterator代替 const iterator ?

原因很简单:常量迭代器不是常量迭代型。这意味着你能够改变常量迭代器的长度(例如:用++来增加长度)。然而,你不能改变常量迭代器所指向的对象的值。

让我们进一步阐明一下。如果你把迭代器考虑成指向T的指针,那么常量迭代器不是指向T的常量指针,而是指向常量T的非常量指针。

在接下来的例子中,常量迭代器的长度成功地增加了。而另一方面,想要通过迭代器,而改变其中的元素值的企图却失败了,因为它是常量迭代器。

std::vector<double> results;

results:push_back(98.99);

results:push_back(86.33);

std::vector<double>::const_iterator it = vi.begin();

++it; //正确,改变迭代器,而不是其中的元素

*it = 100.5; //错误,不能用const_iterator改变其中元素

总之,const_iterator的使用者,不允许通过其迭代器,而改变其指向的元素值。


本文作者Danny Kalev 是一个系统分析家、软件工程师,在C++和面向对象设计方面有着14年的专业经验。




责任编辑:炒饭

欢迎评论投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134