從我所學到的方法來遍歷容器中,如性病::矢量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