使用用户定义的动态容器对元素进行排序
Sorting elements with user defined dynamic containers
我在使用 C++ 对元素进行排序时遇到了一些问题。不幸的是,我不能使用 C++ 容器(教授的要求),所以我创建了一个名为 'vettore' 的新容器,其结构在概念上类似于列表。
所以我试图对 'vettore' 结构中包含的整数进行排序,但是使用以下代码,作为输入 100、10、1,我收到 1、100、100。我真的不明白为什么它不是在职的。
这是 class "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();
};
这是 "vettore" 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]
的动态数组的排序函数?
非常感谢。
应该可以做到 std::sort(a, a + n);
- 当然,当不允许使用标准容器时是否允许这样做当然是另一回事。
我在使用 C++ 对元素进行排序时遇到了一些问题。不幸的是,我不能使用 C++ 容器(教授的要求),所以我创建了一个名为 'vettore' 的新容器,其结构在概念上类似于列表。 所以我试图对 'vettore' 结构中包含的整数进行排序,但是使用以下代码,作为输入 100、10、1,我收到 1、100、100。我真的不明白为什么它不是在职的。 这是 class "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();
};
这是 "vettore" 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]
的动态数组的排序函数?
非常感谢。
应该可以做到 std::sort(a, a + n);
- 当然,当不允许使用标准容器时是否允许这样做当然是另一回事。