Sort aus <algorithm> und arrays



  • naja ich fülle das Array zunächst mit integer Zahlen.
    jetzt will ich einfach zeilenweise über das array mit hilfe einer for-schleife iterieren und die zahlen in dieser zeile sortieren.
    es sollte so aussehen:

    Array vorher
    1. 2 3 1 <- in die sort() reinpacken und sortieren, nachher: 1 2 3 in Zeile 1.
    2. 3 1 5
    3. 5 1 2

    Array nachher
    1. 1 2 3
    2. 1 3 5
    3. 1 2 5



  • Zeig mal bitte mehr code. Ist das ein std::array? Ist das Array wirklich zeilenweise aufgebaut?



  • hätte ich code, würde ich ihn ja hier reinposten ^^ das ist nur eine idee von mir, welche ich realisieren will. die frage ist einfach, ob ich irgentwie zeilenweise die werte nehmen kann und behandeln kann wie ein eindimensionales array.
    z.b. gibt es in anderen sprachen sowas wie das hier array_1[i][], was alle werte in der zeile sind. z.b. kann man sowas kombinieren mit array_2[]=array_1[i][];
    nur so grobes beispiel



  • Du kannst zum Beispiel

    std::vector<std::vector<int>>
    

    nehmen. Dann kannst du jeweils auf den inneren Vectors (= Zeilen) std::sort() aufrufen.

    Könnte man natürlich schön alles wegkapseln, aber wir wollen ja nicht übertreiben.



  • hey, übertreiben oder nicht 😃 ist mir eigentlich egal.
    das ding ist, ich würde das gerne mit einem array lösen wollen. ein solches array

    2 3 1
    3 1 5
    5 1 2

    wird zeilenweise abgespeichert und lässt sich auch als eindimensionales array darstellen, welches i*j einträge hat, sieht also so hier aus:

    2 3 1 3 1 5 5 1 2

    also ist array[0][0] äquivalent zu array[0] mit dem einzigen unterschied das man an das letzte element im zweidimensonalen mit array[3][3]= 2 und in eindimensionalen mit array[9]= 2 rankommt. aber wie mache ich das jetzt 😕



  • Zugriff via

    std::size_t at = y * x_max + x;
    

    ?
    Dann kannst du auf Zeile n mit folgenden Befehlen zugreifen:

    std::size_t start = n * x_max;
    std::size_t end   = start + x_max;
    

    Und das letzte Element ist 2, 2 bzw. 8.



  • ja das stimmt 😃 nochmal zum verständnis.
    was ist dein y, x, x_max, n

    sfgheady



  • x, y sind die Koordinaten (Zeile, Spalte).
    x_max die maximale Zeillenlänge.
    n ist einfach nur eine Variable, beinhaltet eine beliebige Zeilennummer.



  • sehr gut, vielen dank. nun ist alles beantwortet.
    was ich mich frage ist, wieso ihr immer std:: schreibt und nicht einfach den namespace std; hat das einen Grund? bin noch nicht so der c++ kenner 😃



  • weil dann implizit immer ein std als namespace angenommen wird.

    stell dir vor du hast

    namespace n1
    {
      void foo();
    }
    
    namespace n2
    {
      void foo();
    }
    

    wenn du jetzt

    using namespace n1;
    using namespace n2;
    

    machst und irgendwo dann die funktion

    foo()
    

    aufrufst, weiß man nicht welche funktion genommen werden soll.
    deswegen schreibt man dann

    n1::foo();
    n2::foo();
    

    und lässt das using namespace weg.



  • ...



  • ahhh okay, sauber vielen dank euch allen 🙂



  • sfgheady schrieb:

    das ding ist, ich würde das gerne mit einem array lösen wollen. ein solches array

    Ok. Ich würde es auch mal mit std::array versuchen, wie von Swordfish vorgeschlagen. Das kann alles, was ein Array kann, und noch ein paar Sachen mehr, ausserdem werden implizite "Features" wie Konvertierung zu einem Zeiger und fehlende Wertsemantik behoben. Im Debug-Modus werden ausserdem Fehler wie Index-Überschreitungen schön abgefangen. Das Beste daran, std::array ist im Release-Modus nicht langsamer als rohe Arrays.

    Sofern man einen C++11-kompatiblen Compiler hat, spricht nichts mehr dafür, die alten Arrays aus C einzusetzen.


  • Mod

    Nexus schrieb:

    Sofern man einen C++11-kompatiblen Compiler hat, spricht nichts mehr dafür, die alten Arrays aus C einzusetzen.

    Wenn man kein C++11 haben sollte (TR1 ist von 2003 und reicht auch schon), dann spricht auch nichts für die alten C-Arrays. Denn eine Klasse identisch zu std::array kann man sich in 1-2 Stunden selber programmieren und dann für alle Ewigkeiten für sämtliche Array-Bedürfnisse benutzen.


Anmelden zum Antworten