Frage zu C code in C++ umschreiben



  • Neodeo schrieb:

    hey könnt ihr mir kurz nen tipp geben wie ich den teil hier umschreiben kann?

    In C++ etwa so:

    #include <iostream>
    
    struct knoten
    {
        knoten( int tiefe = 0 ) 
            : nummer( ++nummer0 ), links(0), rechts(0) 
        {
            if( tiefe > 0 )
            {
                --tiefe;
                links = new knoten( tiefe );
                rechts = new knoten( tiefe );
            }
        }
        ~knoten()
        {
            if( links ) delete links;
            if( rechts ) delete rechts;
        }
    
        friend std::ostream& operator<<( std::ostream& out, const knoten& kn )
        {
            out << "Nr.: " << kn.nummer << " ";
            if( kn.links ) out << *kn.links;
            if( kn.rechts ) out << *kn.rechts;
            return out;
        }
    
        const int nummer; // 'const' verhindert das Kopieren!
    private:
        static int nummer0;
        knoten *links;
        knoten *rechts;
    };
    int knoten::nummer0 = 0;
    
    int main()
    {
        using namespace std;
        knoten kp(2);
        cout << kp << endl;
        return 0;
    }
    

    Gruß
    Werner



  • Transformer schrieb:

    und was macht man dann aus realloc?
    new, kopieren und deleten?

    Genau richtig erkannt - ein renew gibt es in C++ nicht.



  • Simon2 schrieb:

    .filmor schrieb:

    ...

    ...
        std::vector<int> v (10);
        
        std::generate (v.begin (), v.end (), Counter (2));
    
        std::copy (v.begin (), v.end (), std::ostream_iterator (std::cout, " "));
    
        std::cout << std::endl;
    }
    

    Ahhhh, schöööööön. 😋

    alles quatsch. so muss das aussehen:

    template <typename T>
    void count (T n)
    {
        T i,*ip;
        ip=(int *) malloc(10*sizeof(int));
    
        for(i=0;i<n;i++)
            ip[i]=i+1;
        for(i=0;i<n;i++)
            printf("%d ", ip[i]);
        printf("\n");
        free(ip);
    }
    
    int main(void)
    {
        count<int>(10);
    }
    

    😉



  • LordJaxom schrieb:

    Ich wollte schon auf

    std::cout << "12345678910" << std::endl;
    

    hinaus 😉

    .. ist auch schön. Noch die Zwischenräume dazu und es wär' perfekt 😉

    Meine beiden Favoriten wären:

    #include <iostream>
    #include <vector>
    #include <iterator>     // ostream_iterator
    #include <numeric>      // partial_sum
    
    int main()
    {
        using namespace std;
        vector< int > ip(10,1);
        partial_sum( ip.begin(), ip.end(), ostream_iterator< int >( cout, " " ) );
        cout << endl;
        return 0;
    }
    

    und - falls der Gebrauch von boost ok ist:

    #include <iostream>
    #include <iterator>     // ostream_iterator
    #include <algorithm>    // copy
    #include <boost/iterator/counting_iterator.hpp>
    
    int main()
    {
        using namespace std;
        copy( boost::counting_iterator< int >(1), boost::counting_iterator< int >(10+1),
            ostream_iterator< int >( cout, " " ) );
        cout << endl;
        return 0;
    }
    

    Gruß
    Werner



  • boah man leute ihr seid die besten !!! danke.. darauf wär ich nie gekommen..

    thx nochmal... und super hilfe !!!!

    danköööööööööööööööö baba



  • Neodeo schrieb:

    boah man leute ihr seid die besten !!!

    Na, bei so viel Begeisterung setze ich noch einen drauf. Nehme den Code aus meinem knoten-Posting, füge oben folgendes hinzu:

    #include <algorithm>    // fill_n
    #include <iterator>     // ostreambuf_iterator
    
    const int IO_TABSIZE = std::ios_base::xalloc();
    
    template< typename E, typename Traits >
    std::basic_ios< E, Traits >& tab( std::basic_ios< E, Traits >& io )
    {
        std::fill_n( std::ostreambuf_iterator< E >( io.rdbuf() ), io.iword( IO_TABSIZE ), io.fill() );
        return io;
    }
    
    template< int TabDelta >
    struct indent
    {
        explicit indent( std::ios_base& io ) 
            : m_io( io ) 
        {
            m_io.iword( IO_TABSIZE ) += TabDelta;
        }
        ~indent()
        {
            m_io.iword( IO_TABSIZE ) -= TabDelta;
        }
    private:
        std::ios_base& m_io;
        indent( const indent& );
        indent& operator=( const indent& );
    };
    

    und ändere die Ausgabe von knoten nach:

    struct knoten
    {
        // (s.o.)
        friend std::ostream& operator<<( std::ostream& out, const knoten& kn )
        {
            out << tab << "Nr.: " << kn.nummer << std::endl;
            indent< 4 > ind( out );
            if( kn.links ) out << *kn.links;
            if( kn.rechts ) out << *kn.rechts;
            return out;
        }
    

    dann erhälst Du folgende Ausgabe:

    Nr.: 1
        Nr.: 2
            Nr.: 3
            Nr.: 4
        Nr.: 5
            Nr.: 6
            Nr.: 7
    

    .. auch schön - oder 🕶

    Gruß
    Werner



  • hehe ja ^^ nur dann würde ich den code gar nicht mehr verstehen 🙂 ^^ 😃

    aber danke 😃



  • Werner Salomon schrieb:

    ~knoten()
        {
            if( links ) delete links;
            if( rechts ) delete rechts;
        }
    

    ... präsentierte ihnen das Redundanzministerium für Redundanz 🤡



  • //#include <stdlib.h> 
    //#include <stdio.h> 
    include <iostream> 
    using std::cout; 
    
    int main(void) 
    { 
    //int i,*ip; 
    //ip=(int *) malloc(10*sizeof(int)); 
    int* ip=new int[10]; 
    
    for(int i=0;i<10;i++) 
      ip[i]=i+1; 
    for(int i=0;i<10;i++) 
      //printf("%d ", ip[i]); 
      cout<<ip[i]<<" "; 
    //printf("\n"); 
    cout<<endl; 
    //free(ip); 
    delete[]ip; 
    }
    

    Ähm sorry wenn ich nochmal störe... aber kann mir vllt noch jemand sagen wie ich das ding umschreiben kann das man einen String der Länge 7 allokieren kann ??

    wäre nett müsste das gleich abgeben und hab das in der aufgabe überlesen..

    danke im vorraus



  • char* str7 = new char[8]; // 7 Zeichen + Nullbyte
    

    Vielleicht solltes du mal was über dynamische Speicherverwaltung lesen.
    http://tutorial.schornboeck.net/dyn_speicher.htm


Anmelden zum Antworten