迭代器iterator

迭代器的意义

除了使用下标运算符来访问string对象的字符或vector对象的元素,还有一种更通用的机制也可以实现同样的目的,这就是迭代器

迭代器类似于指针类型,提供了对象的间接访问,其对象是容器中的元素或者string对象中的字符。

使用迭代器

获取迭代器不用取地址符,一般使用beginend成员。

    for(auto it = s.begin();it != s.end() && !isspace(*it);++it){
        *it = toupper(*it);
    }

这个例子中使用了很多迭代器的操作符。

迭代器类型

每个容器定义了一个名为iterator的类型,该类型支持迭代器概念所规定的一套操作。
一般来说我们不知道(其实也无须知道)迭代器的精确类型。
实际上,拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型

vector<int>::iterator it;   //it能读写vector<int>的元素
string::iterator it2;       //it2能读写string对象中的字符
    
vector<int>::const_iterator it3;    it3只能读元素,不能写元素
string::const_iterator it4;         it4只能读字符,不能写字符

如果vector对象是一个常量,只能用const_iterator;如果vector对象不是常量,则既能使用iterator,也能使用const_iterator。

begin和end运算符

begin和end返回的具体类型由对象是否是常量决定,如果是常量,begin和end返回const_iterator;不是则返回iterator
有时候我们想要他返回const_iterator,则使用cbegin和cend。

某些对vector对象的操作会使迭代器失效

任何一种可能改变vector对象容量的操作,比如push_back,都会使vector对象的迭代器失效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容