Wieso funktioniert std::reverse() einfach so?



  • Guten Abend!

    Ich habe einen vector v vom typ einer von mir erstellten struct:

    struct LimitSegment {
        double s1, s2;
        boost::optional<double> left;   
        boost::optional<double> right
    
        LimitSegment(double as1, double as2, double aleft= -1.0, double aright= -1.0);
    };
    
    std::vector<LimitSegment> segments;
    // segments füllen
    reverse(segments.begin(), segments.end());
    

    Ich fülle z.B. den vector segments mit 3 LimitSegment und der vector hat folgenden Inhalt nach dem Füllen: (111, 160), (60, 111), (0, 60). In den Klammern stehen die Werte s1 und s2 der LimitSegment struct.
    Nachdem nun reverse() ausgeführt wurde, hat der vector folgenden Inhalt:
    (0, 60), (60, 111), (111, 160).
    Der LimitSegment wurden genau so sortiert, wie ich es haben wollte (aufsteigend nach s1). Wie kann das sein? Woher weiß denn std::reverse(), wie ich die LimitSegment sortiert haben will? Ich habe doch nirgends einen operator< definiert. 😕



  • reverse sortiert nicht, reverse kehrt einfach die Reihenfolge um.
    Das letzte Element wird das erste, das vorletzte das zweite,...



  • Reverse hat doch einfach nur - wie der Name schon sagt - die Elemente so vertauscht dass sie in um gekehrter REihenfolge dastehen. 😕



  • lol, stimmt! Sorry 😃


Anmelden zum Antworten