给定一个整数向量,我想写一个快速(不明显的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)
但它给了我很多错误,我无法修复.我对编程很新,所以期望所有这些都是基本的和愚蠢的.
请帮我纠正错误或其他算法实现.任何建议和解释都会非常感激.最好不要使用算法库.
您可以使用移除擦除习惯用法.
data.erase(std::remove_if(data.begin(), data.end(),
[](int item) { return item % 2 != 0; }), data.end());
Run Code Online (Sandbox Code Playgroud)