-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 回答