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种都能实现相同效果