Ist in Rust ein Vektor ein Iterator?

7

Stimmt es, dass ein Vektor (neben anderen Collection-Typen) ein Iterator ?

ist?

Zum Beispiel kann ich einen Vektor in der folgenden Weise durchlaufen, weil er das Merkmal Iterator (so wie ich es verstehe) implementiert:

%Vor%

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.

    
Ralph Caraveo 17.04.2016, 04:58
quelle

1 Antwort

20

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.

    
starblue 17.04.2016, 07:12
quelle

Tags und Links