一、使用迭代器
(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;
}
去琢磨迭代器的失效了(逃