1. vector中的erase方法效率是很低。
因為為了保持vector中元素在內存空間中的連續性,在刪除某個元素之后,需要將其后的元素依次向前移動一個位置,平均復雜度為o(n)托福代考 托福答案
gcc 下erase的實現如下:
iterator erase(iteratorposition)
{
if (position + 1 != end())
copy(position + 1, finish, position); // 后續元素往前移動
--finish;
destroy(finish); // 一個釋放資源的全局函數
return position;
}
解決辦法:
如果要刪除了元素在最后一個位置,則不需要移動其他元素,只需要o(1)的時間開銷,基于這種思想,可以實現一種高效的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++ 是先拷貝一份值,再進行++,效率很低