Nur realisiert, dass std::count_if
returns a signed value.Warum gibt std :: count_if einen vorzeichenbehafteten Wert anstelle von unsigned zurück?
Warum ist es so konzipiert? Es macht beide keinen Sinn (das Ergebnis kann nur eine natürliche Zahl sein, dh keine negative Ganzzahl), da es nicht erlaubt, etwas so Einfaches zu tun, wie dieses Ergebnis mit dem size()
des Containers zu vergleichen, ohne entweder eine Warnung zu erhalten oder zu verwenden explizite Typkonvertierung
Ich glaube wirklich, dass der Rückgabetyp size_type
haben sollte.
Fehle ich etwas?
Es ist sinnvoll, den 'difference_type' des Iterators für' count' zurückzugeben, da es sich nur um den Unterschied der Argumente handelt, es sinnvoll ist, diese Schnittstelle für 'count_if' beizubehalten, und es macht auch einige Sinn für den "difference_type", der für bidirektionale Iteratoren zu signieren ist. – BoBTFish
In ähnlicher Weise kann man nicht zwei 'std :: list's in einer konstanten Zeit teilen? –
@WojciechFrohmberg: Einfach, Sie müssen die Elemente zählen. Die einmal erstellte Liste hat O (1) '.size()', was bedeutet, dass sie zwischengespeichert ist, – MSalters