对于vector的遍历,以下两种方法哪种比较好?

lovesi3344 2009-12-18 03:24:39
对于vector的遍历,以下两种方法哪种比较好:
1、for ( int i = 0 ; i < vector.size() ; i++ )
{
vector[i]
}
2、vector::itertor iter;
for ( iter = vector.begin() ; iter != vector.end() ; iter++ )
{
*iter
}

...全文
719 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
aweiname2008 2011-10-10
  • 打赏
  • 举报
回复
vector::itertor iter;
for ( iter = vector.begin() ; iter != vector.end() ; iter++ )
{
*iter
}
个人用第二种比较多一点
逆风向前进 2010-07-30
  • 打赏
  • 举报
回复
还是第二种好
windsting 2009-12-19
  • 打赏
  • 举报
回复
我也倾向于第二种,原因:
1、我觉得这是迭代所谓的“泛型”风格,对所有容器通用,代码风格一致性挺重要的,
2、记得 Thinking in c++ 说过,多数 vector 的实现中,iterator 是指针,
这样的话,这就比下标方式效率要高一点了。

另外,我在迭代的时候绝对只写 ++iter ,而不是 iter++。
kiwigiving 2009-12-18
  • 打赏
  • 举报
回复
第二种比较好,主要的好处在于:
vector<int> c(10, 5); // 将容器c初始化为10个int型数据5
vector<int>::itertor iter;
for (;iter = c.begin() ; iter != c.end() ; ++iter)
{
*iter = 2; // 将所有数据改成2
}

如果突然我们想把vector类型的容器c改成list类型的容器c,我们只需要将
vector<int> c(10, 5) 改成 list<int> c(10, 5);
就修改这么一个地方就可以了,其它地方不需要改的,而如果用第一种方法的
话,不可以用上述的方法直接改一下的,因为list容器不支持下标随机访问。
ferry_passion 2009-12-18
  • 打赏
  • 举报
回复
看不太明白
yzx714 2009-12-18
  • 打赏
  • 举报
回复
当然是迭代器
yunyun050924 2009-12-18
  • 打赏
  • 举报
回复
我感觉差不多,编译器会做优化,
crushor 2009-12-18
  • 打赏
  • 举报
回复
我觉得第一种会高效,因为地址是连续的,其实就是数组了
HelloDan 2009-12-18
  • 打赏
  • 举报
回复
明显,我喜欢第二种,基本没有写过第一种的。
howlet2 2009-12-18
  • 打赏
  • 举报
回复
使用泛型算法遍历:
#include <iostream>
#include <cstring>
#include <functional>
#include <algorithm>
#include <vector>
using namespace std;

/////////////////////////////////////////////////////////////////function object
class Print : public unary_function<int, void>
{
public:

Print(void){}

void operator()(const int& lhs)
{
cout << lhs << ' ';
}
};


int main(int argc, char *argv[])
{
vector<int> V;
V.push_back(1);
V.push_back(2);
V.push_back(3);
V.push_back(4);
for_each(V.begin(), V.end(), Print());


return 0;
}
yangyunzhao 2009-12-18
  • 打赏
  • 举报
回复
vector.at(i)
linfeng000d 2009-12-18
  • 打赏
  • 举报
回复
呵呵 mark
过去的我 2009-12-18
  • 打赏
  • 举报
回复
第二种,因为有五种迭代器供选择..

还有,lz 的第一种写法不是很标准啊
Julykey 2009-12-18
  • 打赏
  • 举报
回复
第一种中的vector[i]使用的方法是*(begin()+i),而第二种的操作只需要指针++。但是第一种以size()来决定循环的执行次数要比第二种以迭代器是否等同来决定循环要快。具体的速度还要看应用。但是第二种更具有扩展,移植的能力。毕竟前向迭代器是最普遍的。
love514425 2009-12-18
  • 打赏
  • 举报
回复
> 都可以,看习惯!

第一种写法更接近与原生数组,而第二种使用迭代器便于相同容器间的转换。
Julykey 2009-12-18
  • 打赏
  • 举报
回复
第一种中的vector[i]使用的方法是*(begin()+i),而第二种的操作只需要指针++。但是第一种以size()来决定循环的执行次数要比第二种以迭代器是否等同来决定循环要快。具体的速度还要看应用。但是第二种更具有扩展,移植的能力。毕竟前向迭代器是最普遍的。
healer_kx 2009-12-18
  • 打赏
  • 举报
回复
你们看看taodm说的呗。。。如果想不通就再想,总比自己臆测出一个结局好。
zuojun 2009-12-18
  • 打赏
  • 举报
回复
第二种好。
WingForce 2009-12-18
  • 打赏
  • 举报
回复
用for_each吧。。。
2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 nscboy 的回复:]
迭代器的方式更高效.
重载的[]是为了随机访问方便的.除非逻辑必要.我觉得循环还是用迭代器更好一些.
当然如果C++新标准中能为第二中方式中提高一个更加方便的变量定义方式就好了:
据说VC2010能够支持这样的语法了:
  for (auto iter = vector.begin() ; iter != vector.end() ; iter++ )
  {
      *iter
  }

[/Quote]
明明是 C++0x 的新特性,还要扯到 VS 上……
gcc 和 icc 都支持……
加载更多回复(15)

64,688

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧