迭代器的意义在哪里
今天我用vector<int>类下的迭代器给一个900000的数组赋值,发现它并不比下标索引符[]速度快,它存在有什么意义吗?代码如下,还是我这个例子不好????#inc...
今天我用 vector<int> 类下的迭代器给一个900000的数组赋值,发现它并不比下标索引符[]速度快,它存在有什么意义吗?代码如下,还是我这个例子不好????
#include<iostream.h>
#include<string.h>
#include<time.h>
#include<vector>
using namespace std;
int main()
{
double t1=clock(),t2;
vector<int> a(9000000);
for(int i=0;i<9000000;i++)
a.push_back(i);
vector<int>::iterator ite=a.begin();
for(int j=0;i<9000000;i++)
{
*(ite+j)=j*j;
a[j]=j*j;//两者方式访问a[j]似乎无差别
}
for(int k=0;k<100;k++)
cout<<a[k]<<' ';
cout<<endl<<endl;
t2=clock();
cout<<t2-t1<<endl;
return 0;
} 展开
#include<iostream.h>
#include<string.h>
#include<time.h>
#include<vector>
using namespace std;
int main()
{
double t1=clock(),t2;
vector<int> a(9000000);
for(int i=0;i<9000000;i++)
a.push_back(i);
vector<int>::iterator ite=a.begin();
for(int j=0;i<9000000;i++)
{
*(ite+j)=j*j;
a[j]=j*j;//两者方式访问a[j]似乎无差别
}
for(int k=0;k<100;k++)
cout<<a[k]<<' ';
cout<<endl<<endl;
t2=clock();
cout<<t2-t1<<endl;
return 0;
} 展开
3个回答
2017-05-11 · 知道合伙人互联网行家
关注
展开全部
首先你要知道什么是迭代器
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。迭代器提供一些基本操作符:*、++、==、!=、=。这些操作和C/C++“操作array元素”时的指针接口一致。
而迭代器的意义:迭代器就是把不同的数据结构 "相同功能 "的函数装到一个名字相同的函数里,这样的话你在写算法的时候就可以不管你要操作的数据结构的逻辑结构了。
比如不管是链表,数组还是别的什么,统一都用迭代器进行访问的话可能都是 Next()表示下一个元素 Pre()表示上一个元素等等 。
其实意思就是,不管你用的是链表,2叉树、3叉树、N叉树,还是向量。 迭代器都可以让你从first开始,使用next,到达last,而且一个不漏滴都走一遍。
你不必知道在next的时候,迭代器是怎样从当前节点跳到下一个节点的。
就和猴子一样,你不必知道猴子是怎样从这个树的节点跳到那个树的!总之,猴子可以把树的所有节点跳一边
展开全部
我记得STL源代码里面是重载了[],vector::operator[] () 里面也是用了iterator来操作的,所以速度方面在release版本下差别不大,只是operator[]()还包括了对边界的判断。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以动态追加内容 而且Vector已经封装了好多 很牛的函数 重载了很多运算符 什么插入 查找 清空 总重要的就是 跌带器的引入 很多问题迎刃而解
更多追问追答
追问
比如说呢
追答
比如数组你定义了 int a[10];
现在你发现数组不够用了你怎么办?vector 就可以不考虑容量,直接push_back
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询