Hvordan lage en vektor av strukturer i C ++

Hvordan lage en vektor av strukturer i C ++
En vektor av strukturer er en god datastruktur for en databasetabell. Følgende tabell er en produktdatabasetabell:
Produkt ID Produktnavn Kategori Antall
1 TV -apparat Underholdning 10
2 VCD Underholdning 20
3 Klærboks Husstand 30
4 Parfyme Skjønnhet 40
5 Banan Frukt 50
6 Pære Frukt 60

Det er seks datrader i tabellen. Overskriften (produktid, produktnavn, kategori osv.) er ikke en datadrekke. Strengt tatt er ikke header raden inkludert i (ikke gjort en del av) vektoren av strukturer i C++. Denne tabellen bør betraktes som en liste over rader med samme radtype, fra rad 1. Strengt tatt kan ikke header raden være av samme type som resten av radene i tabellen.

Strengen i hver celle, av overskriften, beskriver resten av kolonnedataene. Denne artikkelen forklarer hvordan du oppretter en C ++ vektor av strukturer, og dens anvendelse for å opprette en databasetabell.

Artikkelinnhold

- struktur

- Konstruksjon av vektor av strukturer

- Fôring av data i vektoren av strukturer

- Problemet med topprekke

- Konklusjon

Struktur

En struktur ligner en klasse. Objekter blir instantiert fra en struktur. Definisjonen av en struktur begynner med det reserverte ordet, struct, etterfulgt av det generaliserte navnet (klassenavnet) på strukturen, deretter et par seler, som er strukturmedlemmer. Definisjonen ender med en semikolon etter den avsluttende krøllete braketten. Følgende kode er en struktur for hver rad i tabellen ovenfor; Hovedraden blir ikke vurdert her:

struct rad
usignert int produktid;
streng produktnavn;
strengkategori;
usignert int -nummer;
flyte kostnadspris;
Float SellingPrice;
;

Merk at produktnavn og kategorimedlemmer er strenger. Dette betyr at strengbiblioteket må inkluderes i programmet. Det generaliserte navnet for strukturen er, rad. Objekter som rad1, rad2, rad3, etc. kan bli instantiert fra rad. Imidlertid er spesifikke navn for radobjekter ikke nødvendige for denne artikkelen fordi "rad" vil være argumentet for malparameteren for vektoren.

Konstruksjon av vektor av strukturer

Erklæringen om en vektor av tegn kan være:

vektor VTR;

Hvor røye er argumentet til malparameteren for vektoren, hvis navn er, VTR. Tilsvarende ville erklæringen for vektoren av strukturer rader være:

vektor VTR (7);

Hvor "rad" er argumentet for malparameteren for vektoren, hvis navn fremdeles kan være, VTR. Det er seks rader og en topprekke i tabellen ovenfor. Dette gjør antall rader, 7. Rad 0 er overskriften, som kanskje ikke har noen av sine egne data. Det opprinnelige antallet rader kan angis i vektor-av-structs-erklæringen.

For å kode en vektor i et C ++ -program, må vektorbiblioteket inkluderes i programmet. Sjefen for programmet til denne artikkelen skal være:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;

I programmet blir dette fulgt av Struct Row -definisjonen, og deretter erklæringen om vektoren til strukturer som er før C ++ hovedfunksjonen.

Fôring av data til vektoren av strukturer

For å få tilgang til et element i den todimensjonale vektor-av-strukturstrukturen begynner med vektortavnet, e.g., VTR. Det blir fulgt av abonnementsnummeret i firkantede parenteser, som blir fulgt av en prikk, og deretter navnet på kolonnen, e.g., Produkt ID. Følgende kode i C ++ hovedfunksjonen vil mate data i rader fra rad 1 til rad 6:

VTR [1].ProductID = 1; VTR [1].ProductName = "TV -apparat"; VTR [1].Kategori = "Entertainment"; VTR [1].Nummer = 10;
VTR [2].ProductID = 2; VTR [2].ProductName = "VCD"; VTR [2].Kategori = "Entertainment"; VTR [2].Nummer = 20;
VTR [3].ProductID = 3; VTR [3].ProductName = "Clothe Box"; VTR [3].Kategori = "husholdning"; VTR [3].Nummer = 30;
VTR [4].ProductID = 4; VTR [4].ProductName = "Perfume"; VTR [4].Kategori = "skjønnhet"; VTR [4].Nummer = 40;
VTR [5].ProductID = 5; VTR [5].ProductName = "Banana"; VTR [5].Kategori = "frukt"; VTR [5].Nummer = 50;
VTR [6].ProductID = 6; VTR [6].ProductName = "Pear"; VTR [6].Kategori = "frukt"; VTR [6].Nummer = 60;

Etter dette kodesegmentet, vil følgende kodesegment i hovedfunksjonen C ++ vise alle celleverdiene til den todimensjonale strukturen:

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 <Utgangen er:

1, TV -apparat, underholdning, 10

2, VCD, underholdning, 20

3, klærboks, husholdning, 30

4, parfyme, skjønnhet, 40

5, banan, frukt, 50

6, pære, frukt, 60

En for-loop kan brukes til å skrive ut alle verdiene til cellene. For-loopen ville iterere over radene, som begynner fra indeks 1. For-loopen vil ikke iterere noen rad, fordi forskjellige kolonner har forskjellige navn, og hver kolonne kan identifiseres med navnet.

Problemet med topprekke

Topptrekken er på indeks null. Topptrekken består av alle strenger, men resten av radene har ikke bare strengkolonner. Vel, overskriften som en streng er:

"ProductID, produktnavn, kategori, nummer"

Den andre kolonnen i den todimensjonale strukturen tar en streng. Så all denne overskriftsstrengen kan settes i den andre cellen på rad 0. Resten av cellene i rad 0 vil ha standardverdiene. For eksempel er standardverdien til en int -variabel 0.

Kode kan skrives for å skille denne overskriftsstrengen i kolonnehodestrengene for visning av hele tabellen inkludert overskriftsraden, men det er ikke adressert i denne artikkelen.

Å lage den andre cellen på rad 0 har hele toppstrengen er enkel som følger:

VTR [0].ProductName = "ProductID, ProductName, Category, Number";

Legg merke til indeksen på 0 for rad 0. Å lese det hele som en streng er også enkelt som følger:

String str = vtr [0].Produktnavn;
cout << str << endl;

Utgangen skal være:

ProductID, produktnavn, kategori, nummer

Å skille hele strengen i kolonnehodestrenger kan være et problem - det er diskusjon for en annen gang.

Konklusjon

For å lage en vektor av strukturer, definer strukturen, med et generalisert (klasse) navn. Gjør malens argument for vektoren av interesse, det generaliserte navnet på strukturen. Få tilgang til hver celle i den to dimensjonale strukturen med syntaks, VTR [i].Kolumnavn.