2017-09-10 3 views
1

Wondeirng, warum unter Code zurück 1? Ich füge niemals 1 in den multiset Container ein.unerwartete Ausgabe von C++ - Multiset lower_bound

#include <iostream> 
#include <set> 

int main() 
{ 
    std::multiset<int> mymultiset; 
    std::multiset<int>::iterator itlow; 

    mymultiset.insert(-3); 
    itlow = mymultiset.lower_bound (3); 
    std::cout << *itlow << endl; // output 1 

    return 0; 
} 
+2

check für end() - lower_bound Rückgabewert: Iterator zeigt auf das erste Element, das nicht kleiner als Wert ist, oder zuletzt, wenn kein solches Element gefunden wird. –

+0

@ArtemyVysotsky, Verständnis für das Ende, aber warum 1 zurückgegeben wird? Woher kommt es? –

Antwort

4

mymultiset.lower_bound(3) gibt die tiefste Stelle im Behälter, wo 3 gehen könnte, und das ist am Ende des Behälters. So ist gleich mymultiset.end(), und es ist nicht dereferenzierbar. std::cout << *itlow hat undefiniertes Verhalten.

+0

Danke Pete, ich denke, dass 1 zurückgegeben wird, da es undefiniertes Verhalten ist. Markieren Sie Ihre Antwort als Antwort. –

1

Sie versuchen, einen Iterator zu erhalten, dessen Untergrenze 3 ist und Ihr Maximalwert -3 ist. Sie haben also einen Ende-Iterator, dessen Wert nicht definiert ist. Sie sollten multiset::begin() als Iterator verwenden oder etwas wie itlow = mymultiset.lower_bound (-4);, das nicht sehr sanft ist.