Ich habe einen leeren Container mit reserviertem Speicher. Meine Funktion (Algorithmus) benötigt keinen Container, sondern nur den Iterator. Wie fügt man dem Container in dieser Funktion Elemente hinzu? Ich muss Speicher reservieren und den Konstruktor aufrufen, aber wie kann ich den Konstruktor aufrufen, auf den der Iterator verweist?Wie fügt man dem Container, der nur einen Iterator hat, Elemente hinzu?
Antwort
Normalerweise mit etwas wie ein std::inserter_iterator
. Dies beseitigt jedoch normalerweise nicht die Notwendigkeit für einen Zeiger oder eine Referenz auf den Container - es speichert nur diese Referenz innerhalb des Iterators selbst.
Wenn Sie einen voreingestellten Iterator-Typ haben, ist das nicht hilfreich. Wenn Sie etwas wie einen normalen Algorithmus haben, der nur etwas verwenden und verwenden muss, das ein Iterator-Interface verwendet, um es in die Sammlung einzufügen, funktioniert es wunderbar.
std :: inserter_iterator muss einen Container aufnehmen. Aber es wird nicht vom Algorithmus übernommen – user1290126
Sie füttern den Container zu dem 'inserter_iterator', wenn Sie den Iterator erstellen, bevor Ihre Funktion aufgerufen wird. Danach brauchen Sie nur den Iterator. –
Also, ich habe nur ein Element zum Container mit insert_iterator hinzugefügt. Und dann erschien ein Fehler. Wo sollte insert_iterator zeigen, beginnen oder enden? Und sollte ich es erhöhen? – user1290126
Sie können kein Element in einen Container ohne Verweis/Zeiger auf diesen Container einfügen.
Sie können jedoch ein Element überschreiben (vorausgesetzt, Sie haben keine const_iterator
). Etwas wie:
*it = T(params);
wo T
ist der Typ in Frage.
C++ hat das Konzept eines insert_iterator, wovon ich ausgehe?
zum Beispiel:
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
int my_array[] = { 1,2,3,4,5,6,7,8,9,10 };
std::vector<int> my_vector;
std::copy(std::begin(my_array),
std::end(my_array),
std::back_inserter(my_vector));
}
Ich kann den Container nicht benutzen! Ich habe nur einen Iterator. – user1290126
@ user1290126: besser aussehen. 'std :: copy' weiß nichts über' my_vector', es wird nur ein Iterator übergeben, und trotzdem wird es in den Vektor kopiert und erweitert. Dies ist der magische Hintergrund eines 'Output Iterators'. Hier erzeugt 'std :: back_insert (my_vector)' einen Iterator, der beim Anfügen an den Vektor geschrieben wird. –
@ user1290126 Welche Art von Iterator haben Sie?Ein insert_iterator kann Daten einfügen, weil er den Container kennt. Wenn Sie jedoch nur einen normalen forward_iterator haben, ist die Frage, die Sie stellen, eher wie "Wie skaliere ich ein Array mit nur einem Zeiger auf ein element "- zu dem die Antwort einfach" you can not "lautet - Normalerweise ist es Aufgabe des Aufrufers der Funktion, zu entscheiden, welche Art von Iterator verwendet werden soll und ob dieser Iterator in der Lage ist, den Container zu modifizieren. –
Sie kann nicht Container ändern, nur Traverse Iterator aufweist; Sie können stattdessen stattdessen iterator einfügen.
Bearbeitet: Wenn Sie Speicher reservieren müssen Sie wissen, wie viele Elemente es enthalten wird. Dann können Sie leere Elemente hinzufügen, bevor Sie sie an die Funktion übergeben, und sie mit dem Iterator füllen und inkrementieren. Danach können Sie diesen Iterator zurückgeben und er wird auf die Position verweisen, an der die nützlichen Daten enden.
keine gute Idee, weil ich mögliche maximale Anzahl von Elementen kenne, und wenn der Container assoziativ ist, können solche leeren Elemente nicht am Ende stattfinden – user1290126
- 1. Wie fügt man dem Layout-Container in Angular ngMaterial nur Padding oder Rand hinzu?
- 2. ionic: Wie fügt man der Kopfleiste benutzerdefinierte Elemente hinzu oder fügt eigene Kopfleisten pro Ansicht hinzu?
- 3. Wie fügt man dem Xidel-Ausgang einen Zeilenumbruch hinzu?
- 4. Wie fügt man dem Kalender einen langen Wert hinzu?
- 5. Wie fügt man dem Bild bei Hover einen Rahmen hinzu?
- 6. Liste der Elemente fügt nur ein neues Element hinzu
- 7. Wie fügt man dem Eclipse-Projekt einen generierten Quellordner hinzu?
- 8. Wie entfernt und fügt TreeMap während der Iteration Elemente hinzu?
- 9. Wie fügt man dem Layout der Materialschublade Untertitel hinzu?
- 10. Wie fügt man Brotkrume hinzu?
- 11. Wie fügt man der Benachrichtigung Sound hinzu?
- 12. Wie fügt man der Bluemix DevOps-Pipeline einen Leistungstest hinzu?
- 13. ArrayList fügt automatisch null Elemente hinzu
- 14. Wie fügt man NSComboBox einen Text und einen Wert hinzu?
- 15. Wie fügt man einem ionischen 2 Element einen Welleneffekt hinzu?
- 16. Wie fügt man DOMNodeList Elemente in PHP hinzu?
- 17. Wie fügt man Elemente im Popup-Menü hinzu?
- 18. Wie fügt man einem Array dynamisch Elemente in JavaScript hinzu?
- 19. Wie fügt man dem iPhone dynamisch Transparenz hinzu?
- 20. SSIS: Wie fügt man Variablenparameter dem Lookup Transformation Editor hinzu?
- 21. Wie fügt man einen Floating Action Button ohne AppCompat hinzu?
- 22. Wie fügt man dem Windows Explorer eine neue Schaltfläche hinzu?
- 23. Wie fügt man einen Lösch-Callback im Entity-Framework hinzu?
- 24. Android: Wie fügt man dem Widget ein dynamisches Tabellenlayout hinzu?
- 25. Wie fügt man dem Phaser-Spiel die Spine-Animation hinzu?
- 26. Wie fügt man dem Text in Imagemagick Padding hinzu?
- 27. Zing-Diagramm - Wie fügt man dem Tooltip weitere Informationen hinzu?
- 28. SimGrid. Wie fügt man dem Masterworker-Modell zusätzliche Parameter hinzu?
- 29. Wie fügt man einen neuen Transformations-Stil zum Element hinzu?
- 30. Wie fügt man einen Header & Footer im TinyMCE Editor hinzu?
Bitte erläutern Sie, warum Sie nur einen Iterator haben. Die meisten Iteratoren lassen Sie den Container nicht ändern; Sie müssen Zugriff auf den Container dafür haben. Übrigens besteht der Unterschied zwischen einem Iterator und einem Const-Iterator darin, ob Sie das Element und nicht den Container ändern können. –
Auch ** bitte markieren Sie die richtigen Antworten auf Ihre Fragen. ** –
Es ist eine Voraussetzung – user1290126