迭代器介绍

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

 1. 迭代器的使用

获取迭代器不是使用取地址符,而是具有迭代器的类型同时会拥有返回迭代器的成员。比如:begin和end,其中begin成员负责返回指向第一个元素的迭代器,end成员负责返回指向容器尾元素的下一位的迭代器,也就是说,该迭代器自带的元素是一个本不存在的“尾后”元素,这样的迭代器仅作为一个标记,表示我们已经处理完容器中的所有元素。如果容器为空,则begin和end返回的是同一个迭代器,即尾后迭代器!

  • 迭代器的运算符
*iter              //返回迭代器iter所指元素的引用
iter->men         //解引用iter并获取该元素的名为men的成员,等价于(*iter.men)
++iter            //令迭代器指向容器中的下一个元素
iter1==iter2     //判断两个迭代器是否相等

注意:执行解引用的迭代器必须合法并确实指示着某个元素

示例:将字符串的第一个字母大写!
string s("some string");
if(s.begin() !=s.end())
{
       auto it=s.begin();
       *it=toupper(*it);
}

示例:将 字符串的第一个单词改为大写
string s("some string");
for(auto it=s.begin();it !=s.end() && !isspace(*it);++it)
     *it=toupper(*it);
  • 迭代器的类型
就像不知道string和vector的size_type成员到底是什么类型一样,一般来说我们也不知道迭代器的精确类型。而实际上,那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型:
vector<int>::iterator it;
string::iterator it2;
结合解引用和成员访问操作:
(*it).emty()
it->empty();    //这两种方式实现的效果是相同的
注意:任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。
  • 迭代器的运算
iter + n
iter+=n
iter1-iter2
iter1<iter2
迭代器可以实现类似的运算功能
至此,迭代器的介绍结束!





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值