首页 > 其他分享 >迭代器

迭代器

时间:2023-02-04 11:00:13浏览次数:33  
标签:容器 迭代 iterator 元素 iter vector


介绍

  1. 迭代器类似于指针类型,它也提供了对对象的间接访问。
  2. 指针是c语言中就有的东西,迭代器是c++中才有的,指针用起来灵活高效,迭代器功能更丰富些。
  3. 迭代器提供一个对容器对象或者string对象的访问的方法,并且定义了容器范围

迭代器和指针不一样,容器和string有迭代器类型同时拥有返回迭代器的成员。比如,容器都有的成员begin和end,其中begin成员复制返回指向第一个元素(第一个字符)的迭代器,而end成员返回指向容器(或string对象)尾元素的下一个位置的迭代器,也就是说end指示的是一个不存在的元素,所以叫end返回的是尾后迭代器。一般我们清楚一个迭代器的准确类型是什么,所以我们都是使用auto或者decltype来定义变量的。
 

vector<int> v;
auto b=v.begin();
decltype(v.begin()) b=v.begin();

标准容器迭代器的运算符

*iter      返回迭代器iter所指元素的引用
iter->men 解引用iter并获得该元素的名为men的成员,相当于(*iter).men
++iter 令iter指示容器的下一个元素
--iter 令iter指示容器的上一个元素
iter1==iter2 如果两个迭代器指示的是同一个元素或者它指向同一个容器的尾后迭代器,则相等.

迭代器的类型

拥有迭代器的标准库类型都是使用:iterator和const_iterator来表示迭代器的类型:

vector <int> ::iterator it;        //it能读写vector<int>的元素
vector <int>::const_iterator it; //it只能读vector<int>的元素,不可以修改vector<int>中的元素

string::iterator s; //s可以读写string对象中的元素
string::const_iterator s; //s只可以读string对象中的元素,不可以修改string对象中的元素

const_iterator和常量指针一样,只可以读取但不可以修改所指的值。

为了便于得到const_iterator类型的返回值,引入两个新的函数,分别是cbegin和cend,功能类似于begin和end,只是返回的值类型为const_iterator;

迭代器的运算

iter+n           //迭代器加上一个整数值仍得到一个迭代器,迭代器指示的新位置向前移动了,指示可能是容器的一个元素或者是尾部的下一个位置
iter-n //相反,迭代器指示的位置向后移动了,指示可能是容器的一个元素或者是尾部的下一个位置
iter1+=n //等价于iter1+n
iter1-=n //等价于iter2-n
iter1-iter2 //两个迭代器的距离,

可以对迭代器对象加上或减去一个整形值。这样做将产生一个新的迭代器,其位置在 iter 所指元素之前(加)或之后(减) n 个元素的位置。加或减之后的结果必须指向 iter 所指 vector 中的某个元素,或者是 vector 末端的后一个元素。加上或减去的值的类型应该是 vector 的 size_type 或 difference_type 类型,例子:
 

int main()
{
std::vector<int> ivec(10, 68);
print_int_vector(ivec);
int i = 0;
for (std::vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter, i++)
*iter = i; // set element to which iter refers to i
print_int_vector(ivec);
std::vector<int>::iterator iter = ivec.begin();
iter += 100;
std::cout<<*iter;

return 0;
}

本例子中ivec有10个元素,iter+=j,j在10以内都不会有错(0~9),大于等于10则会出现溢出问题,编译器,运行中间都不会报错!可以加当然可以减。

总而言之,迭代器就是一个队容器里元素操作的工具。

标签:容器,迭代,iterator,元素,iter,vector
From: https://blog.51cto.com/u_15952369/6036941

相关文章

  • C++迭代器种类与编译期间多态
    迭代器分类C++STL中根据移动能力将迭代器分成了5类:InputIterator输入迭代器,只支持operator++操作。OutputIterator输出迭代器,只支持operator++操作。......
  • TensorFlow中,对于1个batch中有多个样本,迭代一次,具体是如何执行的
    TensorFlow中,对于1个batch中有多个样本,迭代一次,具体是如何执行的total=旧参下计算更新值1+旧参下计算更新值2+…+旧参下计算更新值500新参数=旧参数+totalRef:​​......
  • 动态修改Azure DevOps区域路径或迭代路径的继承权限(Inhertiance)
    Contents1.场景描述2.解决方案2.1更改继承的接口:ChangeInhertiance2.2获取区域路径的接口:ClassificationNodes1.场景描述客户使用工作项模板,定制了一个设计变更流程,需......
  • 浅谈python容器、迭代器与生成器
    前言:for...in...循环时,与while不同的是,for可以自动访问容器中的下一个元素,这是为什么呢?#用while循环访问列表容器iter_a=iter(a)whileTrue:try:print(ne......
  • Java Iterator(迭代器)的作用?
    JavaIterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代ArrayList和HashSet等集合。获取迭代器的方法:arrayList.Iterator()。参考1:https://www.runoo......
  • 动态数组以及指针迭代器
    1#include<vector>//动态数组2#include<iostream>3usingnamespacestd;4vector<int>vec;//定义5intmain(){6intn;7cin>>n;8......
  • Python迭代器,生成器,装饰器
    迭代器通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某一段代码块,并将每一次迭代得到的结果作为下一次迭代的初始值)。可迭代对象(iterable......
  • 迭代器的妙用
    例如:实现数列求和#include<bits/stdc++.h>usingnamespacestd;structnode{ intval; node&operator=(intv){ val+=v; return*this; }};structiter{......
  • 一文看懂python的迭代器和可迭代对象
    阅读完本文,你将收获以下知识点:什么是迭代器和可迭代对象,他们之间有什么关系迭代器可以迭代的底层原理是什么如何自定义可迭代对象和迭代器迭代器和可迭代对象是两个非常难以......
  • [数据结构]二叉树的前中后序遍历(递归+迭代实现)
    二叉树的遍历主要的三种遍历方式二叉树主要的遍历方式有前序遍历、中序遍历和后序遍历。(1)前序遍历:根节点-->左子树-->右子树(2)中序遍历:左子树-->根节点-->右子树(3)后序......