2016-04-10 137 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

如果你做的所有这个程序将正常工作,但不要忘记格式化。