使用用户定义的动态容器对元素进行排序

Sorting elements with user defined dynamic containers

本文关键字:元素 排序 用户 定义 动态      更新时间:2023-10-16

我在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();                  
};

这是"vettore"类(用于需要):

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); - 当然,当您不允许使用标准容器时是否允许这样做当然是另一回事。

相关文章: