IntSet数组实现

时间:2011-10-06 13:19:41

标签: c++ arrays

我有以下代码实现IntegerSet类,想法是当我插入元素时它应该排序,然后打印它

#include <iostream>
using namespace std;
class IntSet{
public :
    int n,*x;
public:
    IntSet(int maxelms,int maxval){
        x=new int[1+maxelms];
        n=0;
        x[0]=maxval;
    }
    int size(){ return n;}
    void insert(int t){
        for (int i=0;x[i]<t;i++){
            if (x[i]==t)
                 return ;
        for (int j=n;j>=i;j--)
           x[j+1]=x[j];
           x[i]=t;
           n++;
         }
    }

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

             cout<<x[i]<<"  ";
         }
    }
};
int main(){
    IntSet b(11,20);
    b.insert(0);
    b.insert(6);
    b.insert(3);
    b.insert(7);
    b.insert(5);
    b.insert(11);
    b.insert(10);
    b.insert(18);
    b.insert(13);
    b.insert(16);
    b.print();

    return 0;
}

但问题是,当我运行时,它只显示按任意键继续,出了什么问题?

2 个答案:

答案 0 :(得分:1)

你的insert代码永远不会进入循环(因为向量中的第一个元素总是大于传递给函数的任何元素)并返回而没有做任何事情。

代码有点模糊。查找insertion sort - 这就是您需要的。

除此之外,您的代码会泄漏内存,因为类没有清除其内存。更好地使用std::vector而不是手动管理的内存。

答案 1 :(得分:1)

Donno,试着跑步:

 IntSet b(11,20);
    b.print();
    b.insert(0);
    b.print();
    b.insert(6);
    b.print();
    b.insert(3);
    b.print();
    b.insert(7);
    b.print();
    b.insert(5);
    b.print();
    b.insert(11);
    b.print();
    b.insert(10);
    b.print();
    b.insert(18);
    b.print();
    b.insert(13);
    b.print();
    b.insert(16);
    b.print();

看看发生了什么......