-5

配列の削除に問題があります

int calc_mode (vector<int> array, int arrSize) { 
  int ipRepetition = new int[arrSize];
  int j;
  bool bFound;

  for(int i =0; i<arrSize; i++) {
    ipRepetition [i] = 0;
    j=0;
    bFound = false;
    while ( j<i && array[i] != array[j] ) {
      if(array[i] != array[j]) {
        ++j;        
      }   
    }
  }

  int iMaxRepeat = 0;
  for(int i =0; i<arrSize; i++)  {
    if(ipRepetition[i] > ipRepetition[iMaxRepeat] ) {
      iMaxRepeat = i;
    }  
  }

  delete [] ipRepetition; //compiler is complaining here
  return array[iMaxRepeat];
}

エラー:「ipRepetition」を削除できません....私が見逃したことを指摘していただけますか?

4

4 に答える 4

3

時々、最良の答えは質問を解くことです。そのintの配列を手動で割り当てる代わりに、別のを使用しvector<int>ます。

于 2012-09-02T20:35:56.653 に答える
2
int ipRepetition = new int[arrSize];

正しくありません。ipRepetitionポインタである必要があります。

int* ipRepetition = new int[arrSize];
于 2012-09-02T20:32:05.727 に答える
1

int*の代わりに必要ですint

int* ipRepetition = new int[arrSize];
于 2012-09-02T20:32:40.933 に答える
0

@Pete Becker(IMO、優れた)の提案に加えて、ほとんどの作業を行うためにいくつかの標準的なアルゴリズムを使用することを検討します。std::mismatch実行が終了する各場所(つまり、入力の値が前の値と等しくない場所)を教えてくれます。一緒にstd::distance(またはランダムアクセスイテレータを使用しているので単に減算)、各実行の長さをかなり直接教えてくれます。

ランレングスを見つけたら、それを使用std::max_elementして最も長いランレングスを見つけることができます。

于 2012-09-02T21:53:02.130 に答える