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

时间:2016-02-07 18:32:53

标签: c++ sorting methods user-defined

我在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]的动态数组的排序函数?  非常感谢你。

1 个答案:

答案 0 :(得分:0)

它应该工作std::sort(a, a + n); - 当然,当你不被允许使用标准容器时是否允许这当然是另一回事。