IntSet数组实现

IntSet array implementation

本文关键字:实现 数组 IntSet      更新时间:2023-10-16

我有以下代码实现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;
}

但问题是,当我运行时,它显示只按任何键继续,有什么问题吗?

您的insert代码永远不会进入循环(因为vector中的第一个元素总是大于传递给函数的任何元素),并且不做任何操作就返回。

代码有点晦涩。查找插入排序-这就是你需要的。

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

不要,试着运行:

 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();