2016-04-10 165 views
-2

我對C++仍然很陌生,所以這對我來說是一個學習過程。此外,我知道我應該開始使用矢量做到這一點,但我有一個指定數組所以我想編寫一個函數,消除陣列中的所有元素重複練習,但我收到錯誤從數組中刪除多個元素並創建一個動態數組C++

C2100:非法的間接

,如果有人能在正確的方向

int main() 
{  
    int *t; 
    int removel[9] = { 1, 1, 1, 2, 3, 4, 5, 6, 6, }; 
    t = removeAll(removel, 9, 1); 

    for (int i = 0; i < 8; i++) 
     cout << t[i] << " "; 
} 

int* removeAll(int list[], int listlength, int removeitem) 
{ 
    int count = 0; 
    int* list2; 
    int removeindex; 
    int length; 
    int tempindex; 

    for (int i = 0; i < listlength; i++) 
    { 
     if (removeitem == list[i]) 
      count++; 
    } 

    length = listlength - (count + 1); 
    list2 = new int[length]; 
    int j; 
    while (j<=length) 
    { 
     remove_if(list[0], list[listlength - 1], removeitem); 

     for (j = 0; j < length; j++) 
      if (list[j] == NULL)// not sure what the remove_if func puts inplace of the removed element 
       continue; 
      else 
       list2[j] = list[j]; 
    } 
    return list2; 

} 
+1

#1在你需要它們之前不要聲明你的變量。 – LogicStuff

+0

使用矢量。我沒有看到你想要使用數組的理由。 Array的大小是固定的。 – Auriga

+0

它爲我正在使用的教科書的練習,只是試圖學習如何完成這項任務。 – cj881

回答

-1

Firstable指向我,你應該計算lengthlistlength - count,不listlength - (count + 1)
然後,在list2 = new int[length];之後,您應該複製與removeitem不同的元素並跳過其他元素。你可以這樣做

int j = 0; 
    for (int i = 0; i < listlength; i++) { 
     if (removeitem == list[i]) 
      continue; 
     list2[j] = list[i]; 
     j++; 
    } 

並返回成功創建list2。但你也應該知道它的大小。你可以通過在main中創建int tSize並通過鏈接將它傳遞給removeAll來完成。 removeAll將其值更改爲length。因此,在返回list2之前,將int & list2size添加到removeAll的參數列表中並寫入list2size = length;。最後,在打印t時,將i < 8更改爲i < tSize

如果你做的所有這個程序將正常工作,但不要忘記格式化。