1、遍历一个容器,大家一般会这么写;(用迭代器遍历)
#include <list>
#include <iostream>
int main(){
std::vector<int> vec;
for(vector<int>::iterator iter=vec.begin();iter!=vec.end();iter++)
{
cout<<(*iter)<<endl;
//do something
}
}
2、c++11提供了类型推导,可以简化上面的代码;
for(auto &p:vec)
{
cout<<p<<endl;
//do something
}
/*总结:显然,新的写法很简洁,但仅仅如此吗?第一种写法每次循环都会调用vec.end(),
可以看出每次调用end()函数都会创建一个iterator对象,每次调用都不可避免的发生对象的构造,
复制....等等动作,这对于应用于高性能的场合,这种无意义的重复显然是不可接受的。*/
论迭代器和auto的效率问题
最新推荐文章于 2024-08-21 01:12:26 发布