Wie kann man 2 Array verschmelzen?



  • Hallo nata,

    ich nehme an, dass Du damit

    #include <iterator>
    #include <iostream>
    
    template< typename I1, typename I2, typename O >
    void reissverschluss( I1 first1, I1 last1, I2 first2, I2 last2, O out )
    {
        for( ; first1 != last1 || first2 != last2; )
        {
            if( first1 != last1 )
                *out++ = *first1++;
            if( first2 != last2 )
                *out++ = *first2++;
        }
    }
    
    int main()
    {
        using namespace std;
        int fg[] = { 14, 31, 29, 18, 15, 19 };
        int fk[] = { 3, 7, 10 };
        reissverschluss( fg, fg + sizeof(fg)/sizeof(*fg), fk, fk + sizeof(fk)/sizeof(*fk), ostream_iterator< int >( cout << "Ausgabe ", " " ) );
        cout << endl;
        return 0;
    }
    

    nicht viel anfangen kannst. Das mit den Arrays ist irgendwie umständlich. Ständig muss man sich um das Ende des Arrays kümmern.

    Das Programm oben erzeugt

    Ausgabe 14 3 31 7 29 10 18 15 19
    

    poste mal den Code, der fg und fk beschreibt. ... Ah - da ist er ja schon.

    Gruß
    Werner



  • ich muss doch abwechselnd ausgeben. zuerst habe ich mir überleft, dass ich das mit 2 for schleifen mache, aber es hat kein sinn

    @werner: danke werner für dein Code, aber es ist für mich kompliziert. ich lerne schritt für schritt und schaue dass ich möglichst viele codes schreibe, damit ich im oktober auf der prüfung kein probleme habe



  • nata schrieb:

    ich muss doch abwechselnd ausgeben. zuerst habe ich mir überleft, dass ich das mit 2 for schleifen mache, aber es hat kein sinn

    eine schleife reicht. ich würde für die aufteilung der zahlen zwei zählvariable spendieren, damit das programm für die ausgabe weiß, wieviele zahlen jeweils in den arrays sind.



  • Wasn das für ´ne beknackte Aufgabe? Was passiert denn für die Eingaben

    1 2 3 4 5 6 7 8 9 10
    

    und

    x = 25
    

    ?

    Ansonsten kriegt man das Ganze relativ einfach mit std::vector , std::partition und std::greater hin. Einfach alle Werte in den Vektor einlesen, std::partition mit dem Prädikat std::greater<int>( x ) aufrufen und die Werte ausgeben.



  • in klein und gross ist doch die größe der jeweiligen arrays gespeichert

    meinst du dass ich so machen soll:

    if(gross > klein){
             //for schleife wo ich gross durchlaufe
         }else{
                //for schlefe wo ich klein durchlaufe
             }
    

    in meinem fall weiß ich schon dass gross mehr ist habe so gemacht

    for(int i = 0; i < gross; i++){
    		cout << fg[i] << " " << fk[i];
    	}
    

    aber ausgabe war 14 331 729 1018 3276715 494119 -844248416



  • DocShoe schrieb:

    Wasn das für ´ne beknackte Aufgabe? Was passiert denn für die Eingaben

    1 2 3 4 5 6 7 8 9 10
    

    und

    x = 25
    

    ?

    Ansonsten kriegt man das Ganze relativ einfach mit std::vector , std::partition und std::greater hin. Einfach alle Werte in den Vektor einlesen, std::partition mit dem Prädikat std::greater<int>( x ) aufrufen und die Werte ausgeben.

    dann passiert bei korrekter implemetierung das:

    ausgabe:

    Fg:
    Fk: 1 2 3 4 5 6 7 8 9 10

    nata schrieb:

    in klein und gross ist doch die größe der jeweiligen arrays gespeichert

    okay, das ist gut. später kannst dann vektoren benutzen, dann kannst du die zählvariable sparen, also weglassen.
    🙂



  • [quote="nata"]
    meinst du dass ich so machen soll:

    if(gross > klein){
             //for schleife wo ich gross durchlaufe
         }else{
                //for schlefe wo ich klein durchlaufe
             }
    

    nein, eher so:

    for (i=0; i<zahl_eingebe; i++)
    {
    if ( i<klein ) cout << fk[i] ....
    if ( i<gross ) cout << fg[i] ....

    }



  • wahnsinn. es funktioniert, aber als ich den codeteil gelesen habe, habe nicht geglaubt dass es funktionieren konnte 🙂

    aber als ich groß durchgelaufen bin und cout << fg[i] << " " << fk[i];
    ausgegeben habe,warum war so komische ausgabe?

    danke nochmals



  • büddää, null problemooooo
    🙂



  • nata schrieb:

    aber als ich groß durchgelaufen bin und cout << fg[i] << " " << fk[i];
    ausgegeben habe,warum war so komische ausgabe?

    weil du 2 zahlen mit einem leerzeichen dazwischen ausgegeben hast (-> "5 87") und im nächsten schleifen durchlauf das gleiche wieder gemacht hast ohne trennzeichen(-> "5 87" + "2 67" ==> "5 872 67")



  • nata schrieb:

    aber als ich groß durchgelaufen bin und cout << fg[i] << " " << fk[i];

    das funktioniert auch nur, wenn die Arrays gleich groß sind.



  • sind sie ja, aber sie sind nicht unbedingt komplett gefüllt mit richtigen daten, sprich ab einem gewissen index könnte schmuh rauskommen


Anmelden zum Antworten