Strutture dati C ++
Gli array C / C ++ consentono di definire variabili che combinano diversi elementi di dati dello stesso tipo, ma structure è un altro tipo di dati definito dall'utente che consente di combinare elementi di dati di diversi tipi.
Le strutture vengono utilizzate per rappresentare un record, supponiamo di voler tenere traccia dei tuoi libri in una libreria. Potresti voler monitorare i seguenti attributi di ogni libro:
- Title
- Author
- Subject
- ID libro
Definizione di una struttura
Per definire una struttura, è necessario utilizzare l'istruzione struct. L'istruzione struct definisce un nuovo tipo di dati, con più di un membro, per il programma. Il formato dell'istruzione struct è questo:
struct [structure tag] {
member definition;
member definition;
...
member definition;
} [one or more structure variables];
Il structure tagè opzionale e ogni definizione di membro è una normale definizione di variabile, come int i; o float f; o qualsiasi altra definizione di variabile valida. Alla fine della definizione della struttura, prima del punto e virgola finale, è possibile specificare una o più variabili di struttura ma è opzionale. Ecco il modo in cui dichiareresti la struttura del libro:
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
} book;
Accesso ai membri della struttura
Per accedere a qualsiasi membro di una struttura, utilizziamo il member access operator (.). L'operatore di accesso ai membri è codificato come un periodo tra il nome della variabile di struttura e il membro della struttura a cui si desidera accedere. Userestistructparola chiave per definire variabili di tipo struttura. Di seguito è riportato l'esempio per spiegare l'uso della struttura:
#include <iostream>
#include <cstring>
using namespace std;
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main() {
struct Books Book1; // Declare Book1 of type Book
struct Books Book2; // Declare Book2 of type Book
// book 1 specification
strcpy( Book1.title, "Learn C++ Programming");
strcpy( Book1.author, "Chand Miyan");
strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;
// book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;
// Print Book1 info
cout << "Book 1 title : " << Book1.title <<endl;
cout << "Book 1 author : " << Book1.author <<endl;
cout << "Book 1 subject : " << Book1.subject <<endl;
cout << "Book 1 id : " << Book1.book_id <<endl;
// Print Book2 info
cout << "Book 2 title : " << Book2.title <<endl;
cout << "Book 2 author : " << Book2.author <<endl;
cout << "Book 2 subject : " << Book2.subject <<endl;
cout << "Book 2 id : " << Book2.book_id <<endl;
return 0;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Book 1 title : Learn C++ Programming
Book 1 author : Chand Miyan
Book 1 subject : C++ Programming
Book 1 id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Yakit Singha
Book 2 subject : Telecom
Book 2 id : 6495700
Strutture come argomenti di funzione
Puoi passare una struttura come argomento di una funzione in modo molto simile quando passi qualsiasi altra variabile o puntatore. Accederesti alle variabili di struttura nello stesso modo in cui hai avuto accesso nell'esempio precedente:
#include <iostream>
#include <cstring>
using namespace std;
void printBook( struct Books book );
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main() {
struct Books Book1; // Declare Book1 of type Book
struct Books Book2; // Declare Book2 of type Book
// book 1 specification
strcpy( Book1.title, "Learn C++ Programming");
strcpy( Book1.author, "Chand Miyan");
strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;
// book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;
// Print Book1 info
printBook( Book1 );
// Print Book2 info
printBook( Book2 );
return 0;
}
void printBook( struct Books book ) {
cout << "Book title : " << book.title <<endl;
cout << "Book author : " << book.author <<endl;
cout << "Book subject : " << book.subject <<endl;
cout << "Book id : " << book.book_id <<endl;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700
Puntatori alle strutture
Puoi definire puntatori a strutture in modo molto simile mentre definisci puntatore a qualsiasi altra variabile come segue:
struct Books *struct_pointer;
Ora è possibile memorizzare l'indirizzo di una variabile di struttura nella variabile puntatore definita sopra. Per trovare l'indirizzo di una variabile di struttura, inserire l'operatore & prima del nome della struttura come segue:
struct_pointer = &Book1;
Per accedere ai membri di una struttura utilizzando un puntatore a quella struttura, è necessario utilizzare l'operatore -> come segue:
struct_pointer->title;
Riscriviamo l'esempio sopra usando il puntatore della struttura, spero che questo ti sia facile da capire il concetto -
#include <iostream>
#include <cstring>
using namespace std;
void printBook( struct Books *book );
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main() {
struct Books Book1; // Declare Book1 of type Book
struct Books Book2; // Declare Book2 of type Book
// Book 1 specification
strcpy( Book1.title, "Learn C++ Programming");
strcpy( Book1.author, "Chand Miyan");
strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;
// Book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;
// Print Book1 info, passing address of structure
printBook( &Book1 );
// Print Book1 info, passing address of structure
printBook( &Book2 );
return 0;
}
// This function accept pointer to structure as parameter.
void printBook( struct Books *book ) {
cout << "Book title : " << book->title <<endl;
cout << "Book author : " << book->author <<endl;
cout << "Book subject : " << book->subject <<endl;
cout << "Book id : " << book->book_id <<endl;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700
La parola chiave typedef
C'è un modo più semplice per definire le strutture o puoi "alias" i tipi che crei. Ad esempio:
typedef struct {
char title[50];
char author[50];
char subject[100];
int book_id;
} Books;
Ora puoi usare Libri direttamente per definire variabili di tipo Libri senza usare la parola chiave struct. Di seguito è riportato l'esempio:
Books Book1, Book2;
Puoi usare typedef parola chiave per non-struct così come segue:
typedef long int *pint32;
pint32 x, y, z;
x, yez sono tutti puntatori a interi lunghi.