从数组函数中删除元素

时间:2012-04-08 15:01:50

标签: c++ algorithm visual-c++ visual-c++-2010

是否有任何已经实现的函数具有initialArray,sizeOfInitialArray,outArray和sizeOfOutArray参数,在创建精确元素大小的新数组后,取一个数组并删除特定元素,如下所示:

void removeElement(int *initialArray, int sizeOfInitialArray, int *& outArray, int & sizeOfOutArray)
 {
       // some code here
 }

我知道我记得有一些功能正是我想要的处理代码,买我忘了那个功能的名字。

提前感谢您的努力。

2 个答案:

答案 0 :(得分:0)

请参阅stl..it中的remove将进行处理,然后您可以创建一个新数组并返回..

NotTested!完整的代码将是

#include <algorithm>
void removeElement(int *initialArray, int sizeOfInitialArray, int ValueToBeRemoved, int      *& outArray, int & sizeOfOutArray)
{
 int* endOfArray = initialArray+sizeOfInitialArray;
 endOfArray = remove(initialArray,endOfArray,ValueToBeRemoved);
 sizeOfOutArray = (endOfArray - initialArray);
 outArray = new int[sizeOfOutArray];
 memcpy(outArray,initialArray,(endOfArray - initialArray)*sizeof(int));
}

答案 1 :(得分:0)

你可以使用erase-remove idiom

#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>

bool f (int value) { return value % 2; }

int main()
{
    std::vector<int> v = { 10, 11, 2, 3, -1 };
    v.erase(std::remove_if(v.begin(), v.end(), f), v.end());
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " ")); 
}

如果我理解你的话