迭代器iterator

一、使用迭代器

(1)迭代器类型

迭代器按照定义方式分成以下四种:

①正向迭代器

eg:vector<int>::iterator it;

②常量正向迭代器

eg:vector<int>::const_iterator it;

③反向迭代器

eg:vector<int>::reverse_iterator it;

④常量反向迭代器

eg:vector<int>::const_reverse_iterator  it; 

如果对象只需读无需写的话,最好使用常量类型迭代器。

(2)迭代器的使用

eg:

string s("some string");

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

{

        *it=toupper(*it);
}

(3)迭代器失效*

任何一种可能改变vector对象容量的操作,都会使该vector对象失效。(书99页)

注意:凡是用了迭代器的循环体都不要向迭代器所属容器做添加操作

迭代器失效问题

迭代器失效简单总结

(PS:虽然第三章并没有展开讲,估计重头戏在后面,但这个知识点感觉得好好研究学习一下)


二、迭代器的运算

eg:

//使用迭代器实现二分查找

//sought位要查找的内容

vector <int> vec;

auto begin=vec.begin(),end=vec.end();

auto mid=vec.begin()+(end-begin)/2;

while(mid!=end&&*mid!=sought) //还有元素尚未检查且还没找到sought时执行循环

{

        if(sought<*mid) //如果查找的元素在前半部分

                end=mid;

        else

                begin=mid+1;

        mid=begin+(end-begin)/2;

}

去琢磨迭代器的失效了(逃

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。