我有以下代码实现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;
}
但问题是,当我运行时,它只显示按任意键继续,出了什么问题?
答案 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();
看看发生了什么......