何时使用常量迭代器(const_iterator)
CODE
你是否疑惑,为什么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的使用者,不允许通过其迭代器,而改变其指向的元素值。 |
评论