我定义了一变量vector<mystruct>my,我想按条件删除某几个元素,但是这样操作却使cpu到100%了,请问如何删除?难道必须用remove_if吗?
vector<mystruct>::iterator it;
for(it = my.begin(); it!=my.end(); it++)  //换成++it也有问题
{
  mystruct d = *it;//取出数据来
  if (d满足条件)
     my.erase(it);
}

解决方案 »

  1.   

    老兄,你这个是错误的,应该要从vector的后面往前面循环去删除,要不然有些项没有被判断
      

  2.   

    你erase 后, vector 重新排列了其中的内容,所以会有问题的.
      

  3.   

    你可以这样写
    vector<mystruct>::iterator it;
    it = my.begin();
    while (it != my.end()) {
    mystruct d = *it;
    if (d满足条件) {
      my.erase(it);
      if (my.size()) {
        it = my.begin();
      }
    }else {
      it++;
    }
    }其中it = my.begin() 可能导致有写 数据被重复比较,可以想办法用两个itertor 试试.
      

  4.   

    上面有个错误.应该这样
    vector<mystruct>::iterator it;
    it = my.begin();
    while (it != my.end()) {
    mystruct d = *it;
    if (d满足条件) {
      my.erase(it);
      if (my.size()) {
        it = my.begin();
      }else {
    break;
      }
    }else {
      it++;
    }
    }
      

  5.   

    hdqqq(小西瓜) ( ) 你的代码帮了我的大忙了,在此表示十二万分的感谢!!!