我想检查一个向量,如果其元素同时具有整数A和B,则删除它们之间的元素并复制到另一个向量。例如,有两个向量; vector<> pathvector<> v1

   Path         v1

---A***B##    ---AB##


所以任务是删除A和B之间的元素
这是一个C ++代码,但不幸的是它无法正常工作。关于这是什么问题有任何想法吗?

vector< > Path,v1;

vector<int>::iterator it2,it3;

int A,B;

it2=find(Path.begin(), Path.end(), A) ;
it3=find(Path.begin(), Path.end(), B) ;



vector<int> v1(Path.begin(),Path.end());

if (it2 != Path.end() && it3 != Path.end())
{


  if(it2<it3)
  {
     v1.erase(it2+1,it3);
  }
  else
  {
    v1.erase(it3+1,it2);
  }

}

最佳答案

首先,您正在if块中创建一个新的v1,但是我敢肯定您想分配给已经存在的那个。您还将迭代器从Path向量传递到v1的擦除函数,从而导致未定义的行为。我还可以通过不首先添加不需要的元素来保存v1.erase所做的工作。

if (it2 != Path.end() && it3 != Path.end())
{
    if(it3<it2)
    {
        std::swap(it2,it3);
    }

    ++it2; // simplifies logic later

    // optional step to possibly save an allocation
    size_t total = std::distance(Path.begin(), it2);
    total += std::distance(it3,Path.end());
    v1.reserve(total);

    v1.assign(Path.begin(), it2);
    v1.insert(v1.end(), it3, Path.end());
}


请注意,如果使用A==B,则会将该元素添加两次。我不确定这是否是所需的行为,但它是否适合您的问题描述。

关于c++ - 如何删除 vector 中的元素(或A与B之间的距离),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19480611/

10-11 22:50
查看更多