chapter 8: arrays
DESCRIPTION
Chapter 8: Arrays. Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda. Topics. 8.1 Arrays Hold Multiple Values 8.2 Accessing Array Elements 8.3 Inputting and Displaying Array Contents 8.4 Array Initialization - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/1.jpg)
Chapter 8: Arrays
Starting Out with C++ Early Objects Seventh Edition
by Tony Gaddis, Judy Walters, and Godfrey Muganda
![Page 2: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/2.jpg)
Topics
8.1 Arrays Hold Multiple Values8.2 Accessing Array Elements8.3 Inputting and Displaying Array
Contents8.4 Array Initialization8.5 Processing Array Contents8.6 Using Parallel Arrays
8-2
![Page 3: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/3.jpg)
Topics (continued)
8.7 The typedef Statement8.8 Arrays as Function Arguments8.9 Two-Dimensional Arrays8.10 Arrays with Three or More
Dimensions8.11 Vectors8.12 Arrays of Class Objects
8-3
![Page 4: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/4.jpg)
8.1 Arrays Hold Multiple Values
• Array: variable that can store multiple values of the same type
• Values are stored in adjacent memory locations
• Declared using [] operatorconst int ISIZE = 5;
int tests[ISIZE];
8-4
![Page 5: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/5.jpg)
Array Storage in Memory
The definition int tests[ISIZE]; // ISIZE = 5
allocates the following memory
8-5
Element 0 Element 1 Element 2 Element 3 Element 4
![Page 6: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/6.jpg)
Array Terminology
In the definition int tests[ISIZE];
– int is the data type of the array elements– tests is the name of the array– ISIZE, in [ISIZE], is the size declarator. It
shows the number of elements in the array.– The size of an array is the number of bytes
allocated for it (number of elements) * (bytes needed for each
element)
8-6
![Page 7: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/7.jpg)
Array Terminology Examples
Examples:Assumes int uses 4 bytes and double uses 8
bytes
const int ISIZE = 5, DSIZE = 10;
int tests[ISIZE]; // holds 5 ints, array // occupies 20 bytes
double volumes[DSIZE];// holds 10 doubles // array is 80 bytes
8-7
![Page 8: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/8.jpg)
8.2 Accessing Array Elements
• Each array element has a subscript, used to access the element.
• Subscripts start at 0
8-8
subscripts 0 1 2 3 4
![Page 9: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/9.jpg)
Accessing Array Elements
Array elements (accessed by array name and subscript) can be used as regular variables
tests[0] = 79;cout << tests[0];cin >> tests[1];tests[4] = tests[0] + tests[1];cout << tests; // illegal due to // missing subscript
8-9
0 1 2 3 4 tests
![Page 10: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/10.jpg)
8.3 Inputting and Displaying Array Contents
cout and cin can be used to display values from and store values into an array
const int ISIZE = 5;
int tests[ISIZE]; // Define 5-elt. array
cout << "Enter first test score ";
cin >> tests[0];
8-10
![Page 11: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/11.jpg)
Array Subscripts
• Array subscript can be an integer constant, integer variable, or integer expression
• Examples: Subscript is
cin >> tests[3]; int constant
cout << tests[i]; int variable
cout << tests[i+j]; int expression
What happens if subscript is not an integer???
8-11
![Page 12: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/12.jpg)
Inputting and Displaying All Array Elements
To access each element of an array– Use a loop (usually a for loop)– Let loop control variable be array
subscript– A different array element will be
referenced each time through loop
for (i = 0; i < 5; i++) cout << tests[i] << endl;
Note difference between array location and contents!!!
8-12
![Page 13: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/13.jpg)
Getting Array Data from a File
const int ISIZE = 5, sales[ISIZE]; ifstream dataFile; datafile.open("sales.dat"); if (!dataFile) cout << "Error opening data file\n"; else { // Input daily sales for (int day = 0; day < ISIZE;day++) dataFile >> sales[day]; dataFile.close(); }
8-13
![Page 14: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/14.jpg)
No Bounds Checking
• There are no checks in C++ that an array subscript is in range – so no messages
• An invalid array subscript can cause program to overwrite other memory
• Example:const int ISIZE = 3;int i = 4;int num[ISIZE];num[i] = 25;
8-14
num
[0] [1] [2]25
![Page 15: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/15.jpg)
Off-By-One Errors• Most often occur when a program
accesses data one position beyond the end of an array, or misses the first or last element of an array.
• Don’t confuse the ordinal number of an array element (first, second, third) with its subscript (0, 1, 2)
8-15
![Page 16: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/16.jpg)
8.4 Array Initialization• Can be initialized during program
execution with assignment statements tests[0] = 79; tests[1] = 82; // etc.
• Can be initialized at array definition with an initialization list const int ISIZE = 5;int tests[ISIZE] = {79,82,91,77,84};
8-16
![Page 17: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/17.jpg)
Partial Array Initialization
• If array initialized at definition with fewer values than size of array, remaining elements set to 0 or NULL
int tests[ISIZE] = {79, 82};
• Initial values used in order; cannot skip over elements to initialize noncontiguous range
8-17
79 82 0 0 0
![Page 18: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/18.jpg)
Start at element 0 or 1?• May choose to declare arrays to be
one larger than needed. Allows use of element with subscript 1 as ‘first’ element, etc. & may minimize off-by-one errors.
• Element with subscript 0 is not used.• Most often done when working with
ordered data, e.g., months of the year or days of the week
8-18
![Page 19: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/19.jpg)
Implicit Array Sizing• Can set array size by size of the
initialization list short quizzes[]={12,17,15,11};
• Must use either array size declarator or initialization list when array is defined
short quizzes[4]={12,17,15,11};
8-19
12 17 15 11
![Page 20: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/20.jpg)
8.5 Processing Array Contents
• Array elements can be – treated as ordinary variables of same
type as array– used in arithmetic operations, in
relational expressions, etc.
• Example: if (principalAmt[3] >= 10000) interest = principalAmt[3] * intRate1; else interest = principalAmt[3] * intRate2;
8-20
![Page 21: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/21.jpg)
Using Increment & Decrement Operators with Array Elements
When using ++ and -- operators, don’t confuse the element with the
subscript
tests[i]++; // adds 1 to tests[i]
tests[i++]; // increments i, but has // no effect on contents
// of tests
8-21
![Page 22: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/22.jpg)
Copying One Array to Another
• Cannot copy with an assignment statement:
tests2 = tests; //won’t work
• Must instead use a loop to copy element-by-element:
for (int indx=0; indx < ISIZE; indx++)
tests2[indx] = tests[indx];
8-22
![Page 23: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/23.jpg)
Are Two Arrays Equal?• Like copying, cannot compare in a single
expression:if (tests2 == tests)
• Use a while loop with a boolean variable:bool areEqual=true;
int indx=0;
while (areEqual && indx < ISIZE)
{ if(tests[indx] != tests2[indx])
areEqual = false;
}
8-23
![Page 24: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/24.jpg)
Sum, Average of Array Elements• Use a simple loop to add together
array elementsfloat average, sum = 0;
for (int tnum=0; tnum< ISIZE; tnum++)
sum += tests[tnum];
• Once summed, average can be computedaverage = sum/ISIZE;
8-24
![Page 25: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/25.jpg)
Largest Array Element
• Use a loop to examine each element & find largest element (i.e., one with largest value)
int largest = tests[0]; for (int tnum = 1; tnum < ISIZE; tnum++) { if (tests[tnum] > largest) largest = tests[tnum]; } cout << "Highest score is " << largest;
• A similar algorithm exists to find the smallest element
8-25
![Page 26: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/26.jpg)
Partially-Filled Arrays• Exact number of data (and, therefore,
array size) may not be known when a program is written.
• Programmer makes best estimate for maximum amount of data, sizes arrays accordingly. A sentinel value can be used to indicate end-of-data.
• Programmer must also keep track of how many array elements are actually used
8-26
![Page 27: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/27.jpg)
C-Strings and string Objects - OMIT
Can be processed using array name – Entire string at once, or – One element at a time by using a
subscript
string city;cout << "Enter city name: ";cin >> city;
8-27
'S' 'a' 'l' 'e' 'm'
city[0] city[1] city[2] city[3] city[4]
![Page 28: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/28.jpg)
8.6 Using Parallel Arrays
• Parallel arrays: two or more arrays that contain related data
• Subscript is used to relate arrays
– elements at same subscript are related
• The arrays do not have to hold data of the same type
8-28
![Page 29: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/29.jpg)
Parallel Array Example
const int ISIZE = 5; string name[ISIZE]; // student namefloat average[ISIZE]; // course averagechar grade[ISIZE]; // course grade
8-29
01234
01234
01234
name average grade
![Page 30: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/30.jpg)
Parallel Array Processingconst int ISIZE = 5;
string name[ISIZE]; // student name
float average[ISIZE]; // course average
char grade[ISIZE]; // course grade
...
for (int i = 0; i < ISIZE; i++)
cout << " Student: " << name[i]
<< " Average: " << average[i]
<< " Grade: " << grade[i]
<< endl;
8-30
![Page 31: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/31.jpg)
8.7 The typedef Statement
• Creates an alias for a simple or structured data type
• Format:typedef existingType newName;
• Example:typedef unsigned int Uint;Uint tests[ISIZE]; // array of
// unsigned ints
8-31
![Page 32: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/32.jpg)
Uses of typedef
• Used to make code more readable• Can be used to create alias for array
of a particular type
// Define yearArray as a data type// that is an array of 12 intstypedef int yearArray[MONTHS];
// Create two of these arraysyearArray highTemps, lowTemps;
8-32
![Page 33: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/33.jpg)
8.8 Arrays as Function Arguments
• Referred to as Pass by Pointer– Equivalent to Pass by Reference (Address)
• To define a function with an array parameter, use empty [] to indicate array argument
• To pass array to a function, just use array name
// Function prototype void showScores(int []);
// Function header void showScores(int tests[])
// Function call showScores(tests);
8-33
![Page 34: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/34.jpg)
Passing an Array Element• Passing a single array element to a
function is no different than passing a regular variable of that data type
• Function does not need to know that the value it receives is coming from an array
displayValue(score[i]); // call
void displayValue(int item) // header { cout << item << endl; }
8-34
![Page 35: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/35.jpg)
Passing an Entire Array
• Use array name, without any brackets, as the argument
• Can also pass the array size so the function knows how many elements to process
showScores(tests, 5); // call void showScores(int[], int); // prototype void showScores(int A[], int size)
// header8-35
![Page 36: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/36.jpg)
Modifying Arrays in Functions
• Array parameters in functions are similar to reference variables– No copy, share array memory location
• Changes made to array in a function are made to the actual array in calling function
• Must be careful that an array is not inadvertently changed by a function
8-36
![Page 37: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/37.jpg)
8.9 Two-Dimensional Arrays
• Can define one array for multiple sets of data
• Like a table in a spreadsheet
• Use two size declarators in definition
int exams[4][3];
8-37
Number of rows
Number of cols
First number
ALWAYS represents
Rows!!
![Page 38: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/38.jpg)
Two-Dimensional Array Representation
int exams[4][3];
Use two subscripts to access element exams[2][2] = 86;
8-38
exams[0][0] exams[0][1] exams[0][2]
exams[1][0] exams[1][1] exams[1][2]
exams[2][0] exams[2][1] exams[2][2]
exams[3][0] exams[3][1] exams[3][2]
columns
rows
![Page 39: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/39.jpg)
Initialization at Definition• Two-dimensional arrays are initialized
row-by-rowint exams[2][2] = { {84, 78},
{92, 97} };
• Can omit inner { }
• What will this do?int exams[2][2] = { 84, 78};
8-39
84 78
92 97
![Page 40: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/40.jpg)
Passing a Two-Dimensional Array to a Function• Use array name as argument in function call
getExams(exams, 2);• Use empty [] for row & size declarator for
column in prototype & header
// Headervoid getExams int exams[][NUM_COLS], int rows)
// Prototype, where NUM_COLS is 2 void getExams(int[][NUM_COLS], int);
8-40
![Page 41: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/41.jpg)
Using typedef with aTwo-Dimensional Array
Can use typedef for simpler notation
typedef int intExams[][2];...
// Function prototypevoid getExams(intExams, int);
// Function header void getExams(intExams exams, int rows)
8-41
![Page 42: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/42.jpg)
2D Array Traversal
• Traversal: to visit every element in a data structure
• Use nested loops, one for row and one for column, to visit each array element.– Outer loop determines if by row or column
• Accumulators can be used to sum (process) elements row-by-row, column-by-column, or over the entire array.
8-42
![Page 43: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/43.jpg)
Example: 2D array
// Fill array by rows
int A[3][5],r,c; //3 rows,5 columns
for (r=0;r<3;++r)
for (c=0;c<5;c++)
{ cin >> A[r][c];}
8-43
![Page 44: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/44.jpg)
Example: 2D array
// Print array by rows
int A[3][5],r,c;//3 rows,5 columns
for (r=0;r<3;++r)
{for (c=0;c<5;c++) { cout << A[r][c];}
cout << ‘\n’;
}
8-44
![Page 45: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/45.jpg)
Example: 2D array
// Sum & Avg values in 3x5 array
int A[3][5],r,c,sum = 0;
float avg;
for (r=0;r<3;++r)
{for (c=0;c<5;c++) {sum += A[r][c]}
}
avg = sum/15.0;
8-45
![Page 46: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/46.jpg)
Processing by Columns
// Fill array by columns
int A[3][5],r,c; //3 rows
//5 columns
for (c=0;r<5;++c)
for (r=0;c<3;r++)
{ cin >> A[r][c];}
8-46
![Page 47: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/47.jpg)
CMPS 1043
•Stop Here in Chapter 8
8-47
![Page 48: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/48.jpg)
8.10 Arrays with Three or More Dimensions
• Can define arrays with any number of dimensionsshort rectSolid(2,3,5);
double timeGrid(3,4,3,4);
• When used as parameter, specify size of all but 1st dimensionvoid getRectSolid(short [][3][5]);
8-48
![Page 49: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/49.jpg)
8.11 Vectors
• Holds a set of elements, like an array
• Flexible number of elements - can grow and shrink– No need to specify size when defined – Automatically adds more space as needed
• Defined in the Standard Template Library (STL)– Covered in a later chapter
• Must include vector header file to use vectors
#include <vector>
8-49
![Page 50: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/50.jpg)
Vectors
• Can hold values of any type– Type is specified when a vector is defined vector<int> scores;
vector<double> volumes;
• Can use [] to access elements
8-50
![Page 51: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/51.jpg)
Defining Vectors
• Define a vector of integers (starts with 0 elements)vector<int> scores;
• Define int vector with initial size 30 elementsvector<int> scores(30);
• Define 20-element int vector and initialize all elements to 0 vector<int> scores(20, 0);
• Define int vector initialized to size and contents of vector finalsvector<int> scores(finals);
8-51
![Page 52: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/52.jpg)
Growing a Vector’s Size
• Use push_back member function to add an element to a full array or to an array that had no defined size // Add a new element holding a 75scores.push_back(75);
• Use size member function to determine number of elements currently in a vector howbig = scores.size();
8-52
![Page 53: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/53.jpg)
Removing Vector Elements
• Use pop_back member function to remove last element from vector scores.pop_back();
• To remove all contents of vector, use clear member function scores.clear();
• To determine if vector is empty, use empty member functionwhile (!scores.empty()) ...
8-53
![Page 54: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/54.jpg)
8.14 Arrays of Class Objects
• Class objects can also be used as array elements class Square{ private: int side; public: Square(int s = 1) { side = s; } int getSide() { return side; }};Square shapes[10]; // Create array of 10 // Square objects
8-54
![Page 55: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/55.jpg)
Arrays of Class Objects
• Like an array of structures, use an array subscript to access a specific object in the array
• Then use dot operator to access member methods of that object
for (i = 0; i < 10; i++) cout << shapes[i].getSide() << endl;
8-55
![Page 56: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/56.jpg)
Initializing Arrays of Objects
• Can use default constructor to perform same initialization for all objects
• Can use initialization list to supply specific initial values for each object
Square shapes[5] = {1,2,3,4,5};
• Default constructor is used for the remaining objects if initialization list is too short
Square boxes[5] = {1,2,3};
8-56
![Page 57: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/57.jpg)
Initializing Arrays of Objects
If an object is initialized with a constructor that takes > 1 argument, the initialization list must include a call to the constructor for that object Rectangle spaces[3] =
{ Rectangle(2,5), Rectangle(1,3), Rectangle(7,7) };
8-57
![Page 58: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/58.jpg)
8.13 Arrays of Structures
• Structures can be used as array elements struct Student{
int studentID;string name;
short year;double gpa;
};const int CSIZE = 30;Student class[CSIZE]; // Holds 30 // Student structures
8-58
![Page 59: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/59.jpg)
Arrays of Structures
• Use array subscript to access a specific structure in the array
• Then use dot operator to access members of that structure cin >> class[25].studentID;
cout << class[i].name << " has GPA " << class[i].gpa << endl;
8-59
![Page 60: Chapter 8: Arrays](https://reader035.vdocuments.us/reader035/viewer/2022062301/56813549550346895d9ca651/html5/thumbnails/60.jpg)
Chapter 8: Arrays
Starting Out with C++ Early Objects Seventh Edition
by Tony Gaddis, Judy Walters, and Godfrey Muganda