社区
C++ 语言
帖子详情
关于Iterator
banana302
2005-03-19 10:13:28
Iterator一般是什么用法,为啥有的类要定义自己的Iterator.能不能举个例子说明一下
...全文
506
9
打赏
收藏
关于Iterator
Iterator一般是什么用法,为啥有的类要定义自己的Iterator.能不能举个例子说明一下
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BillSmith
2005-03-22
打赏
举报
回复
上面诸位的看法仅限于C++的STL及其扩展。未免稍有狭隘知处。
然而Iterator不仅是遍历线性容器,只要是做遍历就可以称作Iterator,++,--的意思是上一个和下一个,至于谁是上一个和下一个,完全看用户的定义。
比如我可以写这样的iterator.
class tree
{
class QXiterator //不好意思忘了前序英文是什么,姑且拼音之。
{
public:
operator++ //意思一下,不严格写了。
operator-- //这里的++,--就是按照前序顺序的下一个和上一个。
};
//还可以写后序遍历的iterator,只需要改动++,--的定义,也就是上一个和下一个的定义。
//另外可以写自己的iterator,不是前序后序中序,只要能够明确说出上一个和下一个就可以。
};
至于iterator是不是一定要支持指针的所有运算,我以为没必要,iterator不是指针的抽象,而是遍历顺序的抽象,诚然往往需要通过iterator访问其指向的东西,因此需要提供相应运算,但是没有必要做到支持指针的所有运算。
另外纵然是线性容器也可以写不是按照一个挨一个的方式访问的iterator。
如果是非线性容器,或者是用户定制的不标准的iterator,或者没有需求,那么iterator的减法以及比较大小运算也可以不要。
tokens
2005-03-22
打赏
举报
回复
呵..我一般就是把它当成VECTOR中封装的一个指针.
tip9914
2005-03-19
打赏
举报
回复
看看JJ侯得STL源码就知道了
iterator是迭代器,通俗一点说就是具有类似指针功能得一种类型,可以有++,——运算,*,——》算符
但是功能又比原生指针更多,一般只有STL中会用到ITERATOR,用来迭代容器中得元素
BillSmith
2005-03-19
打赏
举报
回复
iterator就是迭代器,我愿意叫她遍历器,用来遍历容器元素的。
不同的iterator可以有不同的遍历顺序,只要++和--操作符定义不一样就行了。
比如一棵树的iterator可以有前序的中序的和后序的,
你就可以写不同的iterator,分别实现之。
结果就是你创建一个前序iterator对象,你在作++运算后该对象就会指向按前序遍历的顺序排的下一个节点。
tudou614
2005-03-19
打赏
举报
回复
MSDN中给出的ITERATOR的例子有些简单的,比如:
/* Compile options needed:-GX
*/
#include <iostream>
#include <deque>
using namespace std;
#if _MSC_VER > 1020 // if VC++ version is > 4.2
using namespace std; // std c++ libs implemented in std
#endif
typedef deque<int, allocator<int> > INTDEQUE;
void main()
{
// Create A and fill it with elements 1,2,3,4 and 5
// using push_back function
INTDEQUE A;
A.push_back(1);
A.push_back(2);
A.push_back(3);
A.push_back(4);
A.push_back(5);
// Print the contents of A using iterator
// and functions begin() and end()
INTDEQUE::iterator pi;
for(pi= A.begin(); pi !=A.end(); pi++)
{
cout << *pi <<" " ;
}
cout<<endl;
}
你可以改一下,看下效果,体会下如何用
tudou614
2005-03-19
打赏
举报
回复
不用循环也能打印
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> demo_string(2);
demo_string[0]="这是第1个string对象!";
demo_string[1]="这是第2个string对象!";
cout<<demo_string[0]<<endl;
cout<<demo_string[1]<<endl;
cin.get();
return 0;
}
tip9914
2005-03-19
打赏
举报
回复
举例:比如vector得例子
int a[N];
for(int i=0;i<N;i++)
a[i]=i;
vector<int> vec(a,a+N);
vector<int >:: iterator ite=vec.begin();
vector<int >:: iterator ite_end=vec.end();
while(ite!=ite_end)
{
cout<<*ite;
ite++;
}
cout<<endl; //输出为0,1,2,3,4,5.......N
jwwu
2005-03-19
打赏
举报
回复
iterator就是容器的元素的指针
只不过把他模板化据用通用性
speedfirst
2005-03-19
打赏
举报
回复
iterator的概念源自于对遍历一个线性容器工具的抽象,即如何你能访问这个容器的某个元素。对于最简单的数组,当然可以用数组的索引值,因为数组是连续存放在内存中的;但对于链表,就必须用指针。除此之外,还有还有很多种数据结构需要提供一个方便的工具来访问其中的元素,方法有ID,关键字等等。为了统一所有的容器的这种工具的使用,一般提供一整套容器的开发者就会用一种方式来表示各种容器的访问工具。例如C++ STL就是使用iterator。MFC自己的容器使用position。C#和java也有自己的方法,但方法是不变的。
iterator的用法可以被统一,但不同的底层容器实现其iterator的原理是不一样的。例如iterator++你可以理解为移动到容器的下一个元素,如果底层如果是数组,把索引值加一就行;如果底层是链表,就得执行类似于m_pCurrent = m_pCurrent->pNext;的操作。因此每种容器都有自己的iterator实现方法。
C++ STL iterator的常用方法有:
iterator++ 移到下个元素
iterator-- 移到上个元素
*iterator 访问iterator所指元素的值]
< > == != iterator之间的比较,例如判断哪个元素在前
iterator1 + iterator2 iterator之间的加法运算,类似于指针加法
php关于
Iterator
(迭代)
关于
Iterator
(迭代) 一. PHP中最简单的迭代形式是foreach语句. foreach 可以用于数组, 例如: foreach ($arr as $key=>$value) { echo $key.’ ‘.$value.’/n’;} foreach 也可以...
Java 集合中关于
Iterator
和List
Iterator
的详解
1.
Iterator
Iterator
的定义如下:public interface
Iterator
<E> {}
Iterator
是一个接口,它是集合的迭代器。集合可以通过
Iterator
去遍历集合中的元素。
Iterator
提供的API接口如下:forEachRemaining...
iterator
java库_关于
Iterator
的next()方法
这种写法是不正确的,会报java.util....
iterator
.next()不能连续用,这个为什么
Iterator
iterator
=list.
iterator
();while(
iterator
.hasNext()){if(
iterator
.next().getCompanycode()==null){error.append("接口表中Co...
BUG 关于
iterator
遍历JSONArray
用
iterator
遍历jsonArray时
Iterator
iterator
=jsonArr.
iterator
(); while(
iterator
.hasNext()){ HighwayVehicleDto jo=(HighwayVehicleDto)
iterator
.next();
关于
iterator
.next()
既然
iterator
.next()是输出下一个,那么,第一个怎么输出呢答案是:迭代器和数据结构中的链表一样,有个header指针,header->next()就是链表中第一个元素……如下所示: 1 2 3 4 |当读取一次
iterator
....
C++ 语言
65,184
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章