C++11——const_iterator

  C++中有一个原则:只要有可能,就应该使用const。const_iterator是STL中指涉到const指针的等价物,指涉到不可被修改的值。任何时候只要我们需要一个迭代器而且其指涉的内容没有必要修改,我们就应该使用const_iterator。

  在C++98中,const_iterator得到的支持不够全面。建立它们不容易,而且建立好了后使用方法也受限。比如说我们想要在vector中插入数据,按照C++的原则如果我们不需要改动数值那么就把内容设置成为const,但是插入操作只能接受iterator,而且iterator不论在哪个版本的C++都不能强制转换成const_iterator。

  C++11中对这种情况做了改善。获取和使用const_iterator都变得容易了。容器的成员函数cbegin和cend都返回const_iterator型别,甚至对于非cosnt容器也是如此,并且STL成员函数若要取用指示位置的迭代器,它们也要求使用const_iterator型别。

  所以我们要优先选用const_iterator而不是iterator。

  只有在我们撰写最通用化的库代码的时候,const_iterator的支持才显得不充分。因为这些代码会考虑到某些容器或类似容器的数据结构,会以非成员函数的方式提供begin和end(还有cbegin、cend、rbegin等),而不是成员函数的方式。这就是内建数组的情况,也是某些仅以自由函数形式提供接口的第三方库的情况。这就是内建数组的情况,也是某些仅以自由函数形式提供接口的第三方库的情况。

你可能感兴趣的:(C++学习笔记,#,C++11/14)