vector的代碼優化

第一例:

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章