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

ベクターを使用します。なぜあなたは配列を使いたいのか分からない。配列は固定サイズです。 – Auriga

+0

私は使っている教科書の練習のために、この仕事をどのように達成するかを学ぶことを試みています。 – cj881

答えて

-1

Firstableに私を指すことができれば、あなたがlistlength - count、ないようlengthを計算する必要があります10。
次に、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。しかし、あなたはまたそのサイズを知っているべきです。あなたはメインでint tSizeを作成し、それをremoveAllにリンクで渡すことによってそれを行うことができます。 removeAllはその値をlengthに変更します。したがってを返す前にをremoveAllのパラメータリストに追加してlist2size = length;と記述してください。最後に、tを印刷する場合は、i < 8i < tSizeに変更してください。

このプログラムをすべて実行すると正しく動作しますが、フォーマットは忘れないでください。

関連する問題