排序整数的类不起作用

时间:2011-10-06 14:05:13

标签: c++ sorting

我无法理解为什么以下代码不起作用:

#include <iostream>
#include <algorithm>

using namespace std;
#define maxelms 100

class IntSet{
public :
    int n,*x;
public:
    IntSet(){
        x=new int[1+maxelms];
        for (int i=0;i<maxelms;i++){
            x[i]=0;
        }
    }

    void insert()
    {
        for (int i=0;i<=maxelms;i++)
        {
            x[i]=rand()+RAND_MAX;
        }
    }

    void Sort(){
        sort(&x[0],&x[n]);
    }

    void print()
    {
        for (int i=0;i<n;i++){
            cout<<x[i]<<"  ";
            delete[]x;
        }
    }
};
int main(){
    IntSet b;
    b.insert();
    b.Sort();
    b.print();
    return 0;
}

请帮帮我。

4 个答案:

答案 0 :(得分:2)

代码中有几个错误,例如:

  1. 在遍历delete[]x的循环内调用x - 将其移至之后。
  2. Sortprint依赖于从未初始化的班级成员n
  3. 尝试调试和迭代,甚至尝试单元测试!

答案 1 :(得分:2)

1)您从未设置n,但您尝试使用它。将构造函数更改为:

IntSet(){
  x=new int[1+maxelms];
    for (int i=0;i<maxelms;i++){
  x[i]=0;
  n = 1+maxelms;
}

2)在打印值的循环中,在仅打印一个元素后尝试删除数组,然后转到下一个元素。将print更改为:

void print()
{
    for (int i=0;i<n;i++){
        cout<<x[i]<<"  ";
    }
    delete[]x;
}

3)如果int s,请不要使用动态分配的数组。请改用vector

答案 2 :(得分:1)

我有危险,它与此有关:

         for (int i=0;i<n;i++){

             cout<<x[i]<<"  ";
             delete[]x;
         }

现在 - 这应该足以提示......

答案 3 :(得分:0)

IntSet(){
    //add
    n=maxelms;

//add destructor
~IntSet(){
    delete[] x;//move to here
}