Also, sagen Sie, ich habe eine Klasse, die std::list<std::pair<int, std::string>>
darin hat; Wie kann ich einen Iterator für diese Klasse implementieren, so dass er über Strings in dieser Liste iteriert?Wie kann ich einen Iterator über Felder von Containern erstellen?
Oder zum Beispiel, in meiner Klasse Ich habe einen Vektor von struct
s mit Feldern a
, b
und c
; kann ich einen Iterator (vielleicht erben Vektor Iterator? weiß nicht), die, wenn dereferenziert, wird eine std::pair
, die (b, c)
?
von Iterator meine ich so etwas wie std::vector
‚s Iteratoren: etwas, das ich über whatever.begin()
und iterieren bekommen kann, wie erwähnt, Strings in der Liste.
UPD Okay, hier ist mehr Informationen darüber, was ich will. In meiner HashMap
Klasse habe ich items
: eine Liste von structs
: jeweils mit einem Schlüssel, einem Wert und einem Zeiger auf seinen Platz in der Tabelle. Was ich brauche, ist ein Iterator; aber nicht die, die ich bekommen kann, indem ich items.begin()
mache, da dieser Iterator, wenn dereferenziert wird, meine Struktur zurückgibt. Ich brauche einen Iterator, so dass ich es zurückgeben kann, wenn der Benutzer HashMap.begin()
aufruft, und es sollte in eine std::pair
dereferenziert werden, die (Schlüssel, Wert) entspricht.
Dies sollte, hoffentlich, meine Frage klarer machen.
UPD2 Hier ist meine struct
, wenn das hilft:
template<class KeyType, class ValueType>
struct node {
KeyType key;
ValueType value;
node** place;
node(KeyType key_ = KeyType(), ValueType value_ = ValueType()): key(key_), value(value_) {};
};
Sie können nicht für beliebige Strukturdefinitionen. Dies würde eine Laufzeit-Reflektion erfordern, die in C++ nicht verfügbar ist. Sie können Ihre eigene Iterator-Implementierung für jede konkrete Struktur bereitstellen, in der Sie diese jedoch verwenden müssen. Möglicherweise ist ['std :: tie()'] (http://en.cppreference.com/w/cpp/utility/tuple/tie) nützlich, wenn Sie dies tun. –
Möchten Sie über die Strings in Ihrer Liste oder etwas anderes iterieren? – Galik
Sie sollten erklären, warum Sie solche Iteratoren benötigen, weil es alternative Möglichkeiten gibt, dies zu tun. – Holt