我在C ++上排序元素时遇到了一些问题。不幸的是,我不能使用C ++容器(教授的请求),所以我创建了一个名为' vettore'其结构在概念上类似于列表。 所以我试图对“vettore”中包含的内容进行排序。结构,但使用以下代码,给出输入100,10,1我收到1,100,100。我真的没有得到它为什么不工作。 这是班级" vettore"应该对元素进行排序:
void ordina(){
vettore<T>*aux=this;
vettore<T>*punt_a_min=aux;
bool sentinella=0;
T min=aux->get_my();
while(aux->get_next()!=nullptr){
aux=aux->get_next();
if(aux->get_my()<min){
sentinella=1;
min=aux->get_my();
punt_a_min=aux;
}
}
if(sentinella==1){
punt_a_min->set_obj(this->get_my());
this->set_obj(min);
}
if(this->get_next()!=nullptr)
*(this->get_next()).ordina();
};
这就是&#34; vettore&#34; class(用于需要的):
template<class T> class vettore{
private:
T my_object; //container
vettore <T> * next; //puntatore al prossimo elemento della lista
public:
vettore():next(nullptr){}; //default constructor
vettore(T oggetto, vettore <T> * successivo=nullptr):next(successivo),my_object(oggetto){}; //faccio puntare la lista a quell'elemento
vettore(const vettore <T> &x):next(x.next),my_object(x.my_object){}; //copy constructor
~vettore(){//destructor
if(next!=nullptr){
delete next;
next=nullptr;
}
};
vettore <T> * get_next(){
return next;
};
T get_my(){
return my_object;
};
T& get_obj(){ //ottenere l'oggetto by reference
return my_object;
};
void ordina(){
//vettore<T>*new_this=this;
vettore<T>*aux=this;
vettore<T>*punt_a_min=aux;
bool sentinella=0;
T min=aux->get_my();
while(aux->get_next()!=nullptr){
aux=aux->get_next();
if(aux->get_my()<min){
sentinella=1;
min=aux->get_my();
punt_a_min=aux;
}
}
if(sentinella==1){
punt_a_min->set_obj(this->get_my());
this->set_obj(min);
}
if(this->get_next()!=nullptr)
*(this->get_next()).ordina();
};
void set_next(vettore<T>*e){
next=e;
}
void set_obj(T obj){
my_object=obj;
};
};
如果这不正确(或只是为了好奇),是否有一个声明为int * a = new int [n]
的动态数组的排序函数?
非常感谢你。
答案 0 :(得分:0)
它应该工作std::sort(a, a + n);
- 当然,当你不被允许使用标准容器时是否允许这当然是另一回事。