So erstellen Sie einen Vektor von Strukturen in C ++

So erstellen Sie einen Vektor von Strukturen in C ++
Ein Vektor von Strukturen ist eine gute Datenstruktur für eine Datenbanktabelle. Die folgende Tabelle ist eine Produktdatenbanktabelle:
Produkt ID Produktname Kategorie Nummer
1 Fernsehgerät Unterhaltung 10
2 VCD Unterhaltung 20
3 Kleidungsschachtel Haushalt 30
4 Parfüm Schönheit 40
5 Banane Frucht 50
6 Birne Frucht 60

In der Tabelle befinden sich sechs Datenzeilen. Die Kopfzeile (ProductID, Produktname, Kategorie usw.) ist keine Datenzeile. Streng genommen ist die Header -Reihe nicht in den Vektor von Strukturen in C einbezogen (nicht zu einem Teil)++. Diese Tabelle sollte als eine Liste von Zeilen desselben Zeilentyps angesehen werden, beginnend mit Zeile 1. Streng genommen kann die Kopfzeile -Reihe nicht den gleichen Typ wie der Rest der Zeilen in der Tabelle haben.

Die Zeichenfolge in jeder Zelle der Header -Zeile beschreibt den Rest ihrer Spaltendaten. In diesem Artikel wird erklärt.

Artikelinhalt

- Struktur

- Konstruktion des Vektors von Strukturen

- Fütterung von Daten in den Vektor von Strukturen

- Problem der Kopfzeile

- Abschluss

Struktur

Eine Struktur ähnelt einer Klasse. Objekte werden aus einer Struktur instanziiert. Die Definition einer Struktur beginnt mit dem reservierten Wort, der Struktur, gefolgt von dem verallgemeinerten Namen (Klassenname) der Struktur, dann einem Paar Klammern, in denen Struct -Mitglieder sind. Die Definition endet mit einem Semikolon nach der schließenden lockigen Klammer. Der folgende Code ist eine Struktur für jede Zeile der obigen Tabelle. Die Kopfzeile wird hier nicht berücksichtigt:

Strukturreihe
nicht signiert int productId;
String ProductName;
String -Kategorie;
nicht signierte int -Nummer;
Float Costprice;
Float SellingPrice;
;

Beachten Sie, dass Produktname und Kategorienmitglieder Strings sind. Dies bedeutet, dass die String -Bibliothek in das Programm aufgenommen werden muss. Der verallgemeinerte Name für die Struktur ist, Zeile. Objekte wie Row1, Row2, Row3 usw. kann aus der Reihe instanziiert werden. Für den Zweck dieses Artikels sind jedoch bestimmte Namen für Zeilenobjekte nicht erforderlich, da „Zeile“ das Argument des Vorlagenparameters für den Vektor ist.

Konstruktion des Vektors von Strukturen

Die Erklärung eines Vektors von Charakteren kann sein:

Vektor vtr;

wobei char das Argument des Vorlagenparameters für den Vektor ist, dessen Name ist, VTR. In ähnlicher Weise wäre die Erklärung für den Vektor von Strukturreihen:

Vektor vtr (7);

wobei „Zeile“ das Argument des Vorlagenparameters für den Vektor ist, dessen Name immer noch sein kann, VTR. In der obigen Tabelle befinden sich sechs Zeilen und eine Header -Reihe. Dies macht die Anzahl der Zeilen, 7. Zeile 0 ist die Header -Zeile, die möglicherweise keine eigenen Daten hat. Die anfängliche Anzahl der Zeilen kann in der Erklärung der Stücke des Vektors angegeben werden.

Um einen Vektor in einem C ++ - Programm zu codieren, muss die Vektorbibliothek in das Programm aufgenommen werden. Der Kopf für das Programm dieses Artikels sollte sein:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;

Im Programm folgt die Definition der Strukturen und dann die Deklaration des Vektors der Strukturreihen vor der C ++ - Hauptfunktion.

Fütterung von Daten an den Vektor von Strukturen

Um auf ein Element in der zweidimensionalen Strukturvektor-Struktur zuzugreifen, beginnt e.G., vtr. Nach der Einweisnummer in quadratischen Klammern folgt ein Punkt und dann der Name der Spalte, e.G., Produkt ID. Der folgende Code in der C ++ - Hauptfunktion würde Daten von Zeile 1 bis Zeile 6 in Zeilen füttern:

VTR [1].ProductID = 1; VTR [1].ProductName = "tv set"; VTR [1].Category = "Unterhaltung"; VTR [1].Zahl = 10;
VTR [2].ProductId = 2; VTR [2].ProductName = "vcd"; VTR [2].Category = "Unterhaltung"; VTR [2].Zahl = 20;
VTR [3].ProductID = 3; VTR [3].ProductName = "Klostbox"; VTR [3].Category = "Haushalt"; VTR [3].Zahl = 30;
VTR [4].ProductID = 4; VTR [4].Produktname = "Parfüm"; VTR [4].Category = "Beauty"; VTR [4].Zahl = 40;
VTR [5].ProductID = 5; VTR [5].Produktname = "Banane"; VTR [5].Category = "frucht"; VTR [5].Zahl = 50;
VTR [6].ProductID = 6; VTR [6].ProductName = "pear"; VTR [6].Category = "frucht"; VTR [6].Zahl = 60;

Nach diesem Codesegment würde das folgende Codesegment in der C ++-Hauptfunktion alle Zellwerte der zweidimensionalen Struktur angezeigt:

Cout << vtr[1].ProductID <<", "; cout << vtr[1].ProductName <<", "; cout << vtr[1].Category <<", "; cout << vtr[1].Number <Cout << vtr[2].ProductID <<", "; cout << vtr[2].ProductName <<", "; cout << vtr[2].Category <<", "; cout << vtr[2].Number <Cout << vtr[3].ProductID <<", "; cout << vtr[3].ProductName <<", "; cout << vtr[3].Category <<", "; cout << vtr[3].Number <Cout << vtr[4].ProductID <<", "; cout << vtr[4].ProductName <<", "; cout << vtr[4].Category <<", "; cout << vtr[4].Number <Cout << vtr[5].ProductID <<", "; cout << vtr[5].ProductName <<", "; cout << vtr[5].Category <<", "; cout << vtr[5].Number <Cout << vtr[6].ProductID <<", "; cout << vtr[6].ProductName <<", "; cout << vtr[6].Category <<", "; cout << vtr[6].Number <Die Ausgabe ist:

1, TV Set, Unterhaltung, 10

2, VCD, Unterhaltung, 20

3, Kleiderschachtel, Haushalt, 30

4, Parfüm, Schönheit, 40

5, Banane, Obst, 50

6, Birne, Obst, 60

Eine For-Schleife kann verwendet werden, um alle Werte der Zellen auszudrucken. Die für die Schlaufe würde über die Reihen ab dem Index 1 abrufen. Die For-Loop würde keine Zeile iterieren, da verschiedene Spalten unterschiedliche Namen haben und jede Spalte mit ihrem Namen identifiziert werden kann.

Problem der Kopfzeile

Die Header -Reihe befindet sich bei Index Null. Die Header -Reihe besteht aus allen Saiten, aber die restlichen Zeilen haben nicht nur Stringspalten. Nun, die Kopfzeile als eine Zeichenfolge lautet:

"ProductID, ProductName, Kategorie, Nummer"

Die zweite Spalte der zweidimensionalen Struktur erfordert eine Zeichenfolge. Also kann all diese Header -Saite in die zweite Zelle der Reihe 0 eingebracht werden. Der Rest der Zellen in Zeile 0 hat ihre Standardwerte. Zum Beispiel beträgt der Standardwert einer INT -Variablen 0.

Der Code kann geschrieben werden, um diese Header -Zeichenfolge in seine Spalten -Header -Zeichenfolgen für die Anzeige der gesamten Tabelle einschließlich der Header -Zeile zu trennen, die jedoch in diesem Artikel nicht behandelt wird.

Die zweite Zelle von Zeile 0 zu machen. Die gesamte Header -Zeichenfolge ist einfach wie folgt:

VTR [0].ProductName = "ProductID, ProductName, Kategorie, Nummer";

Beachten Sie den Index von 0 für Zeile 0. Es ist auch einfach wie folgt, alles als eine Zeichenfolge zu lesen:

String str = vtr [0].Produktname;
Cout << str << endl;

Die Ausgabe sollte sein:

ProductID, Produktname, Kategorie, Nummer

Die gesamte Zeichenfolge in Spaltenheader -Zeichenfolgen zu trennen kann ein Problem sein - das ist eine Diskussion für einige andere Zeit.

Abschluss

Um einen Vektor von Strukturen zu erstellen, definieren Sie die Struktur mit einem generalisierten (Klasse) Namen. Machen Sie das Vorlagenargument des Vektors von Interesse, den verallgemeinerten Namen der Struktur. Greifen Sie auf jede Zelle der zweidimensionalen Struktur mit der Syntax VTR [I] zu.Spaltenname.