【发布时间】:2012-09-04 19:17:59
【问题描述】:
这是我的问题,我有一个 double 向量,我需要在特定条件下消除其中的一些。这是一个代码示例:
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--;
}
}
}
因为在 erase() 之后,我的大小减 1 并且所有元素都左移了,所以减小 j 是否正确?
好的,我决定不使用 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;
}
}
}
point 是一个坐标向量,类似于 (x1,y1,z1,x2,y2,z3,...,xn,yn,zn)。 有什么想法吗?
【问题讨论】:
-
所有元素删除后的元素。
std::remove_if可能会更有效,这取决于很多事情。