Вот мой вопрос, у меня есть двойной вектор, и мне нужно устранить некоторые из них при определенном условии. Вот пример кода:
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?
Хорошо, я решил не использовать 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
может оказаться более эффективным в зависимости от ряда факторов. - person eq-   schedule 04.09.2012