Warum ändert sich std :: is_sorted () zwischen Anrufen mit ClangC++

Programme in C++. Entwicklerforum
Anonymous
 Warum ändert sich std :: is_sorted () zwischen Anrufen mit Clang

Post by Anonymous »

Ich habe einen Code, der ein seltsames Verhalten zeigt, wenn std :: is_sorted () zweimal hintereinander aufgerufen wird. Das Ergebnis ändert sich! Der Faustanruf gibt false zurück und der zweite Anruf gibt true zurück. Dies geschieht mit der folgenden < /p>
  • Code: Select all

    Apple clang version 15.0.0 (clang-1500.3.9.4)
  • Code: Select all

    Ubuntu clang version 15.0.7
  • Code: Select all

    Ubuntu clang version 18.1.3 (1ubuntu1)
Beim Kompilieren mit -O2 -std = C ++ 20 . Ich habe auch mit C ++ 11 und c ++ 17 getestet. Der folgende Code verwendet einen Sort -Algorithmus, um ein std :: array zu sortieren und dann zu sehen, dass es std :: is_sorted () ist. Dies ist tatsächlich eine minimale Reproduktion eines Testfalls in einer anderen Codebasis. Ich glaube, der Algorithmus ist korrekt. Wenn ich den Inhalt des Arrays drucke, bevor ich std :: is_sorted () in der erwarteten Reihenfolge und beide Anrufe an std :: is_sorted () true zurückgerechtigt sind. Ich kann dies nicht auf niedrigeren Optimierungsstufen und Gnu G ++ wie erwartet ausgeführt.

Code: Select all

#include 
#include 
#include 
#include 

template
void insertion_sort(T begin, T end)
{
T current = begin;
++current;
while(current < end) {
auto key = *current;
auto j = current - 1;
while(j >= begin && *j > key) {
*(j+1) = *j;
--j;
}
*(j+1) = key;
current++;
}
}

int main(int argc, char* argv[])
{
std::array a{5, 2, 4, 6, 1, 3};
insertion_sort(a.begin(), a.end());
std::cout

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post