首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ vector遍历有关问题

2012-08-07 
C++ vector遍历问题对于vector的遍历,以下两种方法哪种比较好:1、for ( int i 0 i vector.size() i

C++ vector遍历问题
对于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
  }


[解决办法]
STL的好多算法和函数的参数都支持迭代器类型的,如果有这些操作就用第二种比较好点,
但是纯粹取数据的话,第一种比较好,vector本身就是顺序存储的,按序号遍历效率是比较高的。
[解决办法]
这种东西应该归结到风格问题,而不是效率问题……

我刚刚试了试 gcc 的 vector 实现,最终是一个普通数组操作……
你觉得用指针遍历数组快还是用下标遍历数组快?说不清……因为这个问题已经涉及到 C++ 以外的东西了,不同的环境有不同的表现。
[解决办法]
vector使用数组实现的:
如果你是遍历,那么使用两种皆可以
如果想实现的是随机访问,那么当然是第一种
[解决办法]
为什么不用STL函数呢?
vector<int> ivec;
void do(int i) {
 //do something
}
1. for_each(ivec.begin(), ivec.end(), do);

2.输出
copy(ivec.begin(), ivec.end, ostream_iterator(cout, " "));

etc ..
[解决办法]
2、vector::itertor iter; 
for ( iter = vector.begin() ; iter != vector.end() ; iter++ ) 

*iter 

iter 在标准库中是无符号整型 应为下标不可能为负数 没什么区别 也许是安全性考虑吧

如果给iter赋成负数在编译时就能检查出来 而用int就不会报错

2种都能实现相同效果

热点排行