Stimmt es, dass ein Vektor (neben anderen Collection-Typen) ein Iterator
?
Zum Beispiel kann ich einen Vektor in der folgenden Weise durchlaufen, weil er das Merkmal Iterator
(so wie ich es verstehe) implementiert:
Wenn ich jedoch Funktionen verwenden möchte, die Teil des Attributs Iterator
sind (wie fold
, map
oder filter
), muss ich zuerst iter()
für diesen Vektor aufrufen?
Ein anderer Gedanke, den ich hatte, war vielleicht, dass ein Vektor in ein Iterator
konvertiert werden kann, und in diesem Fall macht die obige Syntax mehr Sinn.
Nein, ein Vektor ist kein Iterator.
Aber es implementiert das Merkmal IntoIterator
, welches die for
-Schleife darstellt verwendet, um den Vektor in den erforderlichen Iterator zu konvertieren.
In der Dokumentation für Vec
können Sie sehen, dass IntoIterator
ist Es wird auf drei Arten implementiert: für Vec<T>
, das verschoben wird und der Iterator Elemente vom Typ T
für eine gemeinsame Referenz &Vec<T>
zurückgibt, wobei der Iterator die gemeinsam genutzten Referenzen &T
und für &mut Vec<T>
die änderbaren Elemente zurückgibt Referenzen werden zurückgegeben.
iter()
ist nur eine Methode in Vec
Konvertieren von Vec<T>
direkt in einen Iterator, der gemeinsame Referenzen zurückgibt, ohne ihn zuvor in eine Referenz umzuwandeln. Es gibt eine gleichrangige Methode iter_mut()
zum Erstellen veränderbarer Referenzen.