第一例:
for(vector<int>::iterator iter = vecForeach1.begin();iter < vecForeach1.end();iter++)
{
printf("使用迭代器遍歷vecForeach1向量方式取vecForeach1裏的元素爲%d\n", *iter);
}
可以優化上面的代碼
1.使用typedef vector::iterator Vector_Iter將vector::iterator另外定義一個名字爲Vector_Iter。
2.先計算vecForeach1.end()的值,不用在for裏每次都去計算一次;
3.在for裏使用iter的前置++,效率更高。
4.寫算法的時候儘量使用!=比較迭代器,因爲<對於很多非隨機迭代器沒有這個操作符。
優化後代碼爲:
typedef vector<int>::iterator Vector_Iter;
Vector_Iter iterEnd = vecForeach1.end();
for(Vector_Iter iter = vecForeach1.begin();iter != iterEnd;++iter)
{
printf("優化後的使用迭代器遍歷vecForeach1向量方式取vecForeach1裏的元素爲%d\n", *iter);
}
第二例:假設vec中的元素是對象。要訪問對象中的某一成員total ,那麼首先得判斷vec[i]是否爲空。
if( !vec[i])
{
for( int i = 0; i < vec[i]->total ; i++ )
{
......
}
}
可以優化成:
for( int i = 0; i < (vec[i] ? vec[i]->total : 0) ; i++ )
{
......
}
第三例:輸出vec中的每個元素
for(vector<int>::iterator it = a.begin();it != a.end();it++)
{
cout<<*it<<" ";
}
程序中需要大量輸出的時候,這種輸出方式就顯得很佔篇幅。可以優化成:
void PrintInt(const int&nData)
{
cout << nData << endl;
}
for_each(vecInt.begin(), vecInt.end(), PrintInt);
//使用for_each 需要添加頭文件 #include <algorithm>