快速算法从向量中去除奇数元素

Has*_*sek -2 c++ algorithm

给定一个整数向量,我想写一个快速(不明显的O(n ^ 2))算法来从中删除所有奇数元素.

我的想法是:迭代向量直到第一个奇数元素,然后将它之前的所有内容复制到向量的末尾(调用push_back方法),依此类推,直到我们查看了所有原始元素(除了复制的元素),然后删除所有元素,这样只有矢量的尾巴才能存活.

我编写了以下代码来实现它:

  void RemoveOdd(std::vector<int> *data) {

  size_t i = 0, j, start, end;
  uint l = (*data).size();
  start = 0;

  for (i = 0; i < l; ++i)
    {
      if ((*data)[i] % 2 != 0)
      {
      end = i;
      for (j = start, j < end, ++j)
        {
          (*data).push_back((*data)[j]);
        }
      start = i + 1;
      }
    }
  (*data).erase((*data).begin(), i);
  }
Run Code Online (Sandbox Code Playgroud)

但它给了我很多错误,我无法修复.我对编程很新,所以期望所有这些都是基本的和愚蠢的.

请帮我纠正错误或其他算法实现.任何建议和解释都会非常感激.最好不要使用算法库.

pet*_*ohn 6

您可以使用移除擦除习惯用法.

data.erase(std::remove_if(data.begin(), data.end(),
    [](int item) { return item % 2 != 0; }), data.end());
Run Code Online (Sandbox Code Playgroud)