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
{
if( some condition )
{
swap( vec[i], vec[vec.size()-1]);
vec.pop_back();
}
else
{
i ;
}
}
2.迭代器应用
vector int_vec;
for( vector::iterator iter = int_vec.begin(); iter != int_vec.end(); iter)
{
…
}
干万留意要应用 iter 不可以应用iter
iter 是先复制一份值,再开展 ,高效率很低