2012-04-08 66 views
0

刪除元素是否有任何已經實施的功能有initialArray,sizeOfInitialArray,outArray和sizeOfOutArray參數,需要一個數組,並刪除特定的元素,它創建精確的元件尺寸的新數組,像這樣的事情後,如下:從TE陣列功能

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

我知道我記得有一些函數正好處理代碼,因爲我想買,我忘了那個函數的名字。

在此先感謝您的努力。

+0

簽名不提供要刪除的元素。 – dasblinkenlight 2012-04-08 15:06:25

+0

我不知道任何符合這個(相當具體)要求的標準功能。但是如果你只是使用'std :: vector ',你自己做這件事很簡單。 – 2012-04-08 15:07:29

+0

nah使用remove和realloc會比較適合我的情況,但無論如何感謝Charles! :) – 2012-04-08 15:11:37

回答

0

請參閱remove從stl..it將就地處理,那麼你可以創建一個新的數組並返回..

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)); 
} 
+0

不錯,只是讓我以完全不同的方式思考!謝謝,Semih。 – 2012-04-08 15:10:38

0

您可以使用擦除remove慣用法

#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, " ")); 
} 

如果我理解你的權利