从我所学到的方法来遍历容器中,如性病::矢量STD容器,是使用迭代器,因为这:迭代比使用标准
for(vector<int>::iterator it = numbers.begin(); it != numbers.end(); it++)
我的问题是,为什么不不迭代容器for
,它速度更快,因为不需要调用函数numbers.begin()
和numbers.end()
。
从我的尝试,我发现使用for
是更快的X 30,从使用迭代器。
我写了这个代码:
vector<int> numbers;
for (int i = 0; i < 5000000; i++)
{
numbers.push_back(i);
}
time_t t = time(0);
struct tm * now = localtime(&t);
cout << now->tm_hour << ":" << now->tm_min << ":" << now->tm_sec << "\n";
for(vector<int>::iterator it = numbers.begin(); it != numbers.end(); it++)
{
*it = 7;
}
t = time(0);
now = localtime(&t);
cout << now->tm_hour << ":" << now->tm_min << ":" << now->tm_sec << "\n";
int size = numbers.size();
for (int i = 0; i < size; i++)
{
numbers[i] = i;
}
t = time(0);
now = localtime(&t);
cout << now->tm_hour << ":" << now->tm_min << ":" << now->tm_sec;
输出是:
19:28:25
19:28:56
19:28:57
您似乎认为,标准的容器是可转位(即'号[I]'),那肯定是不规范的做法,但 – 2013-02-23 19:28:07
您正在使用的“标准”'for'在这两种情况下,在你的榜样异常。 – 2013-02-23 19:30:28
您是否启用编译器优化?在调试构建和发布构建之间,'vector :: iterator'的行为可能会有很大差异。 –
aschepler
2013-02-23 19:32:13