這是我的問題,我有一個雙向量,我需要在一定條件下消除其中的一些。這裏是一個代碼示例:vector :: erase()是否改變位置?
vector <double> appo;
for(int i=0;i<appo.size();i++){
for(int j=i+1;j<appo.size();j++){
if(condition(appo[i],appo[j])){
appo.erase(appo.begin()+j);
j--;
}
}
}
因爲擦除後()1,所有的元素,我的尺寸減小就剩移左,是正確的降低J&prime;
好的我決定不使用removeif,因爲它是一個小程序,我現在不在乎性能,但是我得到了段錯誤。 下面是代碼:
vector <double> *point;
for(int i=0;i<point->size();i+=3){
for(int j=i+3;j<point->size();j+=3){
if(distance((*point)[i],(*point)[i+1],(*point)[i+2],(*point)[j],(*point)[j+1],(*point)[j+2]) < treshold){
point->erase(point->begin()+j,point->begin()+j*3);
j-=3;
}
}
}
點是座標爲載體所以像(X1,Y1,Z1,X2,Y2,Z3,...,XN,YN,ZN)。 有什麼想法?
擦除後的所有元素* *。取決於許多事情,'std :: remove_if'可能證明更有效。 –