北京网站建设大概需要多少钱,最新新闻今天最新新闻,500强中国企业名单,网站技巧前言 本篇文章以对string的操作来演示迭代器的操作。 一、什么是迭代器iterator#xff1f;
迭代器#xff08;iterator#xff09;是一种可以遍历容器元素的数据类型。迭代器是一个变量#xff0c;相当于容器和操纵容器的算法之间的中介。C迭代器是一种用于遍历容器中元的…前言 本篇文章以对string的操作来演示迭代器的操作。 一、什么是迭代器iterator
迭代器iterator是一种可以遍历容器元素的数据类型。迭代器是一个变量相当于容器和操纵容器的算法之间的中介。C迭代器是一种用于遍历容器中元的对象。它提供了一种统一的访问容器元素的方式无论容器的类型如何都可以使用相同的语法进行操作。
二、为什么要使用迭代器
因为C更趋向于使用迭代器而不是数组下标操作因为标准库为每一种标准容器如vector、map和list等定义了一种迭代器类型而只有少数容器如vector支持数组下标操作访问容器元素。可以通过迭代器指向你想访问容器的元素地址通过解引用拿到元素值。这和我们所熟知的指针极其类似。
三、迭代器到底是什么 迭代器的本质是一个指针它指向容器中的某个元素。通过迭代器我们可以访问容器中的元素并且可以对元素进行修改、删除或插入操作。迭代器可以分为正向迭代器和反向迭代器分别用于从容器的起始位置向后遍历和从容器的末尾位置向前遍历。 迭代器的实现方式取决于容器的类型。对于数组和指针类型的容器迭代器本质上就是指针通过指针的加减运算来实现遍历。对于其他类型的容器如vector、list等迭代器是一个包含指向容器元素的指针以及一些操作函数的对象。 总结来说C迭代器的本质是一个指针它提供了一种统一的访问容器元素的方式使得我们可以方便地遍历和操作容器中的元素。iterator提供一种统一的方式访问和修改容器。
四 、接口汇总
接口作用begin将迭代器返回到开头end返回迭代器以结束rbegin返回反向迭代器以反向开始rend将反向迭代器返回到反向端cbegin返回const_iterator开头cend返回const_iterator结束crbegin返回const_reverse_iterator以反转开始crend返回const_reverse_iterator反转端
1begin和end 同样有两个重载一个是普通对象一个则是const对象
begin:获取一个字符的迭代器end:获取最后一个字符下一个位置的迭代器 实例操作
string::iterator it s1.begin();每个容器istvectormap等等里都有iterator迭代器所以我们要在iterator前加上作用域当然也可以加auto去自动匹配类型。it取到的是每个元素的位置那么对于*it来说即为每个元素。使用正向迭代器接收iterator.还会有反向迭代器马上会讲。
中途休息~问题思考 那么如果使用const对象呢 使用const修饰的迭代器接收 传入const修饰的对象的引用
通过上图可以发现const修饰后都不能进行修改指向的元素值。
还有重要的一点在一个函数中通常使用迭代器遍历封装为函数采取引用传值减少拷贝构造再加上const做修饰防止权限放大。还必须使用const_iterator 接收如下图 正确的做法是使用const_iterator 接收
2rbegin和rend
rbegin指向的是最后一个字符的位置rend 指向的是第一个字符的前一个位置
实例操作使用反向迭代器接收reverse_iterator
小结 四种迭代器
可读不可改const_iterator 和 const_reverse_iterator可读可改iterator 和 reverse_iterator
一定一定注意权限问题
面试题
为什么这里的while中不写成最常见的形式。而要写成!呢? 原因
it是一个指针它指向的当前指向元素的地址。如果是vctorstring这种他们的地址是连在一起的倒是没啥问题。但是如果是mapset这种的随机地址存储的这样写肯定是不行的因为地址不连续也就没有什么大小可比性了。