C++ Data Structures – Arrow Operator
A data structure is a group of data elements grouped together under one name. These data elements, known as members, can have different types and different lengths.
Regular Variables
The syntax is:
// syntax struct type_name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names; // working sample: struct product { int weight; double price; } apple, banana, melon; // access apple.weight apple.price banana.weight banana.price melon.weight melon.price
Working sample:
// example about structures #include <iostream> #include <string> #include <sstream> using namespace std; // declare data structure struct movies_t { string title; int year; } mine, yours; void printmovie (movies_t movie); int main () { string mystr; mine.title = "2001 A Space Odyssey"; mine.year = 1968; cout << "Enter title: "; getline (cin,yours.title); // store title cout << "Enter year: "; getline (cin,mystr); stringstream(mystr) >> yours.year; // store year cout << "My favorite movie is:\n "; printmovie (mine); cout << "And yours is:\n "; printmovie (yours); return 0; } void printmovie (movies_t movie) { // access data structure cout << movie.title; cout << " (" << movie.year << ")\n"; }
The result is:
Enter title: Alien
Enter year: 1979
My favorite movie is:
2001 A Space Odyssey (1968)
And yours is:
Alien (1979)
Arrays
You can use an Array into Data Structures:
// array of structures #include <iostream> #include <string> #include <sstream> using namespace std; struct movies_t { string title; int year; } films [3]; void printmovie (movies_t movie); int main () { string mystr; int n; for (n=0; n<3; n++) { cout << "Enter title: "; getline (cin,films[n].title); cout << "Enter year: "; getline (cin,mystr); stringstream(mystr) >> films[n].year; } cout << "\nYou have entered these movies:\n"; for (n=0; n<3; n++) printmovie (films[n]); return 0; } void printmovie (movies_t movie) { cout << movie.title; cout << " (" << movie.year << ")\n"; }
The result is:
Enter title: Blade Runner
Enter year: 1982
Enter title: The Matrix
Enter year: 1999
Enter title: Taxi Driver
Enter year: 1976
You have entered these movies:
Blade Runner (1982)
The Matrix (1999)
Taxi Driver (1976)
Pointers to Data Structures
// pointers to structures #include <iostream> #include <string> #include <sstream> using namespace std; struct movies_t { string title; int year; }; int main () { string mystr; movies_t amovie; movies_t * pmovie; pmovie = &amovie; cout << "Enter title: "; getline (cin, pmovie->title); cout << "Enter year: "; getline (cin, mystr); (stringstream) mystr >> pmovie->year; cout << "\nYou have entered:\n"; cout << pmovie->title; cout << " (" << pmovie->year << ")\n"; return 0; }
The result is:
Enter title: Invasion of the body snatchers
Enter year: 1978
You have entered:
Invasion of the body snatchers (1978)
Arrow Operator
The arrow operator (->) is a dereference operator that is used exclusively with pointers to objects that have members. This operator serves to access the member of an object directly from its address.
// arrow operator pmovie->title // equivalent to: (*pmovie).title
Working example:
// pointers to structures #include <iostream> #include <string> #include <sstream> using namespace std; struct movies_t { string title; int year; }; int main () { string mystr; movies_t amovie; movies_t * pmovie; pmovie = &amovie; cout << "Enter title: "; getline (cin, pmovie->title); cout << "Enter year: "; getline (cin, mystr); (stringstream) mystr >> pmovie->year; cout << "\nYou have entered:\n"; cout << pmovie->title; cout << " (" << pmovie->year << ")\n"; return 0; }
The result is:
Enter title: Invasion of the body snatchers
Enter year: 1978
You have entered:
Invasion of the body snatchers (1978)
Nesting (annidate) Structures
... struct movies_t { string title; int year; }; struct friends_t { string name; string email; movies_t favorite_movie; } charlie, maria; friends_t * pfriends = &charlie; ... // After that it would be valid: charlie.name maria.favorite_movie.title charlie.favorite_movie.year pfriends->favorite_movie.year ...
My website: http://www.lucedigitale.com
Reference: http://www.cplusplus.com/doc/tutorial/structures/