Quiz
Fragen
- Was ist der Zweck generischer Typen?
- Was ist ein Trait?
- Welche Traits der Rust Standardbibliothek kennst du? Liste 3 von ihnen auf und beschreibe ihren Zweck.
- Beschreibe ein Beispiel wie sich mit Hilfe generischer Typen und Traits modularer Code schreiben lässt.
- Welches sehr simple alternative modulare Programmiermittel haben wir bereits im Grundlagenkapitel kennen gelernt?
- Was ist der Unterschied zwischen dem ersten Parameter von
und#![allow(unused)] fn main() { fn some_higher_order_fn<T>(f: fn(T) -> T); }#![allow(unused)] fn main() { fn some_higher_order_fn<T, F: Fn(T) -> T>(f: F); } - Welche 3 Closure-Traits gibt es und was unterscheidet sie?
- Was wird mit dem Billion-Dollar-Mistake bezeichnet und wie wird es in Rust verhindert?
- Welche Arten der Fehlerbehandlung gibt es in Rust?
- Was ist ein Iterator?
- Nenne 3 Methoden die einen Iterator in einen anderen Iterator transformieren und beschreibe ihren Zweck.
- Welchen nicht generischen Containertypen kennst du?
- Welche der folgenden Typen kann man als Key einer HashMap verwenden?
String&str[usize; 3]&[usize]Vec<usize>&[f32]Vec<f32>
Aufgabe
Schreibe einen Containertypen VecMap, der ähnlich wie eine HashMap die Methoden
get,get_mut,insertundremove
und die Traits
IndexundIntoIter
implementiert.
IndexMut
kann gerne zusätzlich implementiert werden. Intern besteht der Container aus einem Vec<(K, V)>. Die Suche
nach einem Key ist eine lineare Suche über den Vec. Vergleiche Zeiten verschiedene Zugriffs-, Lese-,
und Schreibesituationen mit denen einer HashMap. Führe die Vergleiche für unterschiedlich viele Elemente durch.
Eine einfache Möglichkeit dazu bietet std::time::Instant.