C++分析研究 |
|
|||
C++ |
日歷
統(tǒng)計(jì)
導(dǎo)航常用鏈接留言簿隨筆檔案
文章檔案搜索最新評(píng)論
閱讀排行榜評(píng)論排行榜 |
1. vector中的erase方法效率是很低。
因?yàn)闉榱吮3講ector中元素在內(nèi)存空間中的連續(xù)性,在刪除某個(gè)元素之后,需要將其后的元素依次向前移動(dòng)一個(gè)位置,平均復(fù)雜度為o(n)托福代考 托福答案 gcc 下erase的實(shí)現(xiàn)如下: iterator erase(iteratorposition) { if (position + 1 != end()) copy(position + 1, finish, position); // 后續(xù)元素往前移動(dòng) --finish; destroy(finish); // 一個(gè)釋放資源的全局函數(shù) return position; } 解決辦法: 如果要?jiǎng)h除了元素在最后一個(gè)位置,則不需要移動(dòng)其他元素,只需要o(1)的時(shí)間開銷,基于這種思想,可以實(shí)現(xiàn)一種高效的vector中刪除元素的方法雅思代考 雅思答案 for(int i=0; i<vec.size();) { if( some condition ) { swap( vec[i], vec[vec.size()-1]); vec.pop_back(); } else { i ++ ; } } 2.迭代器使用 vector<int> int_vec; for( vector<int>::iterator iter = int_vec.begin(); iter != int_vec.end(); ++ iter) { … } 千萬注意要使用++iter 不能使用iter++ iter++ 是先拷貝一份值,再進(jìn)行++,效率很低
|
![]() |
|
Copyright © HAOSOLA | Powered by: 博客園 模板提供:滬江博客 |