Ich arbeite derzeit mit Objekt-Arrays in C++. Ich habe ein Buch-Objekt-Array, das mit Daten aus einer Datendatei gefüllt ist, und ich muss das Array von Buch-Objekten durchlaufen und jedes der Elemente drucken, die Buchdaten enthalten, eines pro Zeile. Wenn ich es ausdrucke, gibt es Elemente in der Liste, die "leer" sind, ohne Titel, keine ISBN, einen Preis von 0 und eine Menge von 0. Wie kann ich erreichen, dass nur die Elemente gedruckt werden, die Daten enthalten?C++ Druckelemente mit Daten aus Objekt-Array
Antwort
Sie eine bereichsbasierte for
Schleife mit einem Häkchen, wenn das Buch Objekt leer ist zu sehen, benutzen könnte:
Book books[255];
// or
std::vector<Book> books;
for(const auto& book : books) {
if(!book.isEmpty()) {
std::cout << book.print() << std::endl;
}
}
Wie @Barmar sagte, es wäre besser, wenn Sie einen std::vector
verwenden und nur hinzufügen eine neue Book
, wenn Sie wissen, dass es kein leeres Objekt ist - dann haben Sie einen Container mit gültigen Büchern und Sie können auf die isEmpty()
Prüfung verzichten.
Wenn Ihr Book
Objekt nicht wirklich einfach zu wissen, interne Weise muss, wenn es leer ist oder nicht, anstatt das Hinzufügen einer isEmpty()
Member-Funktion in die Schnittstelle, ist es besser, einen Nichtmitglied Nicht-Freund Komfort Funktion zu überprüfen, ob das Buch ist leer:
class Book {
public:
std::string title() const;
std::string author() const;
std::string isbn() const;
// simpler is better... it's already getting cluttered...
...
};
// you don't need to be a member of Book to know if a Book is empty!
bool isEmpty(const Book& book) {
return book.title().empty() && book.author().empty() && book.isbn().empty();
}
(das ist ein bisschen wie ein konstruiertes Beispiel - es könnte vernünftigerweise angenommen wird, dass ein Buch leer ist, wenn der Titel leer ist.)
for(const auto& book : books) {
if(!isEmpty(book)) {
std::cout << book.print() << std::endl;
}
}
Eine fortgeschrittenere Technik wäre, die isEmpty(Book)
Convenience-Funktion in denselben Namespace wie das Book
-Objekt zu setzen. Aber das dürfte bei kleinen Projekten nicht wichtig sein.
(98% dieses Beitrags wird von Scott Meyers Effective C++ erbrochen 3rd Edition, ISBN 0-321-33487-6, Preis £ n/a, Menge 1)
- 1. Druckelemente einer Liste in C
- 2. Reduzierung Objektarray mit Fehlerwert
- 3. Druckelemente nach Platz in Array in c
- 4. Druckelemente von AVL-Baum
- 5. Druckelemente in Schleife mit statischen Werten
- 6. Ausnahme: Ungültiges Objektarray mit Comtypes
- 7. B + Baum Druckelemente ist Reihenfolge
- 8. Druckelemente eines Arrays bis zum in C programmierten Schlüssel
- 9. Zweidimensionale Objektarray Rückgabetyp - NSubstitute
- 10. Flatten Javascript Objektarray
- 11. SimpleSchema Validierung für Objektarray
- 12. Update-Objektarray über mehrere Iterationen
- 13. Summe meiner Objektarray Erste
- 14. Filter Objektarray über NodeJS
- 15. HighChart wie Objektarray
- 16. Laravel: iterieren Objektarray
- 17. schreibt Objektarray .txt-Datei
- 18. Durchsuchen von Daten aus Datendatei mit c
- 19. Der Versuch, aus einer Textdatei auf ein Objektarray
- 20. Passing PHP Array JavaScript Objektarray
- 21. Wie Objektarray mit einem Wörterbuch innerhalb
- 22. Filter Objektarray mit Rohr Angular 2
- 23. wie Objektarray mit demselben Schlüsselwert summieren
- 24. Push Objektarray in mongodb mit Mungo
- 25. Pandas Rollberechnungen für Druckelemente im Fenster
- 26. Druckelemente des Arrays in Arraylist in Java
- 27. Druckelemente eines Vektors <Point2i>
- 28. Erste unterschiedliche Werte von Objektarray MongoDB
- 29. Kopieren Werte von Objektarray Eingabefelder in AngularJS
- 30. Liste der Objektarray von XML
Verwenden Sie ein 'if()' Erklärung Überprüfen Sie, ob das Objekt Werte hat. – Barmar
Warum verwenden Sie nicht 'std :: vector', so dass Sie nur gültige Bücher in den Vektor einfügen? – Barmar
Hallo, willkommen zu Stack Overflow. Es wäre großartig, wenn Sie ein [mcve] bereitstellen könnten, damit wir und zukünftige Benutzer genau sehen können, was Sie meinen, anstatt nur eine Beschreibung zu lesen! –