a „NULL Iterator“ für Behälter Vereinbarungs, die kein Ergebnis, um anzuzeigen, verwendet wird, vergleicht gleich zu dem Ergebnis container.end()
.
std::vector<X>::iterator iter = std::find(my_vec.begin(), my_vec.end(), x);
if (iter == my_vec.end()) {
//no result found; iter points to "nothing"
}
Da jedoch ein Standard-Container aufgebaut Iterator nicht mit einem bestimmten Behälter verbunden ist, gibt es keinen guten Wert, der es nehmen könnte. Daher ist es nur eine nicht initialisierte Variable und die einzige zulässige Operation, die damit zu tun hat, ist, einen gültigen Iterator zuzuweisen.
std::vector<X>::iterator iter; //no particular value
iter = some_vector.begin(); //iter is now usable
Für andere Arten von Iteratoren könnte dies nicht wahr sein. ZB im Fall von istream_iterator
, stellt ein default-konstruierter Iterator eine istream_iterator
dar, die den EOF eines Eingabestroms erreicht hat.
'std :: list :: iterator iter;' ist ein __definition__. Während alle Definitionen Deklarationen sind, wäre eine Deklaration, die keine Definition ist: 'extern std :: list :: iterator iter;'. –
sbi
Der Konstruktor gehört insbesondere zur _definition_, keiner anderen Deklaration. Dies bedeutet, dass Sie Werte nur in der (einzelnen) Definition an den Konstruktor übergeben können. Wenn der ctor eine Vorlage ist (wie hier), wird er instanziiert, wo die Definition ist. – MSalters