2010-07-25 5 views
0

ici est IntSetList de mise en œuvre C++mise en œuvre de IntSetLIst

#include <iostream> 
using namespace std; 

class IntSetList{ 

private: 
    int n; 
    struct node{ 

     int val; 
     node *next; 
     node(int v,node *p){val=v;next=p;} 
    }; 
    node *head,*sentinel; 
    node *rinsert(node *p,int t){ 

     if (p->val<t){ 
      p->next=rinsert(p->next,t); 


    } 
     else if (p->val>t){ 
      p=new node(t,p); 
      n++; 
     } 
     return p; 
      } 



public: 
    IntSetList(int maxelens,int maxval){ 
     sentinel=head=new node(maxval,0); 
     n=0; 
      } 



    int size() { return n;} 

    void insert(int t){ head=rinsert(head,t);} 
    void report(int *v){ 

     int j=0; 
     for (node *p=head;p!=sentinel;p=p->next) 
      v[j++]=p->val; 



    } 




    void display (int *v){ 
     for (int i=0;i<sizeof(v)/sizeof(v[0]);i++){ 
      cout<<v[i]; 
     } 





    } 

}; 

int main(){ 



    IntSetList s(10,15); 
    int v[10]; 
    s.insert(7); 
    s.insert(2); 
    s.insert(1); 
    s.insert(11); 
    s.insert(13); 
    s.insert(14); 
    s.insert(5); 
    s.insert(6); 
    s.insert(12); 
    s.insert(9); 
    s.report(v); 

    s.display(v); 






    return 0; 
} 

mais il ne me montre pas de sortie bien sûr, il est C++ bibliothèque standart mais je dois me mettre en œuvre pour que je fais des pratiques s'il vous plaît aider ce qui est faux ?

+0

Vous pouvez nous dire ce que vous voulez/attendez qu'il fasse. En ce moment, il * ressemble beaucoup à une version plus lente de 'std :: set ' (ou peut-être 'std :: multiset '). –

Répondre

1

Pas de sortie du tout? Je suppose qu'il produit au moins un nombre, puisque sizeof(v) est au moins aussi grand que sizeof(v[0]), mais probablement tout aussi grand, car un pointeur est de la même taille qu'un int sur la plupart des ordinateurs 32 bits.

L'astuce sizeof(v)/sizeof(v[0]) fonctionne uniquement sur les tableaux et non sur les pointeurs. Une astuce commune pour se déplacer est de déclarer la fonction comme modèle, ainsi:

template <int N> 
void display (int (&v)[N]) 
{ 
    for (int i = 0; i < N; ++i) 
    { 
     cout << v[i]; 
    } 
} 

Une solution plus classique consiste à passer la longueur explicitement:

void display (int *v, int n) 
{ 
    for (int i = 0; i < n; ++i) 
    { 
     cout << v[i]; 
    } 
} 

Quelques points à noter:

  1. Ceci écrase tous les nombres ensemble parce que vous n'avez placé aucun espace entre eux.
  2. La fonction display ne doit pas nécessairement être membre de IntSetList car elle n'interagit pas du tout avec la classe.

La solution la plus simple, d'ailleurs, est de ne pas écrire la fonction du tout:

std::copy(v, v + sizeof(v)/sizeof(v[0]), std::ostream_iterator<int>(std::cout));