ints, doubles, strings,
etc. already.
Since we can have arrays of any type of object, why not an array of arrays? For example, suppose we have a class of 5 students, each with 6 homework grades, and the grade info is stored in a file grades.txt. I might want to read in the data and store it, so that I can then answer questions for the user - questions like how did student 4 do on homework 3?
But what type of object can I use to store the 6 homework grades that correspond to a given student?
Answer: An array of 6 ints, of course!
Remember, we create an array of
5 objects of type T like this:
|
Each object in my array of students is itself an array of
ints, i.e. each object is an int*.
|
So, if the type of object that gets stored in the array is
int*, we create our array like this:
|
array[i] is an object of type
int*. So wherever you see
a[i] just think of it as being a normal old
pointer:
int** a = new int*[5];
for(int i = 0; i < 5; i++)
a[i] = new int[6];
What gets created and how you index elements in it are depicted
in this diagram on the right:This is how you can create "multi-dimensional" arrays in C++. You just have arrays of arrays! Okay, now let's read the grade information and store it in our 2-dimensional array:
ifstream IN("grades.txt");
for(int s = 0; s < 5; s++)
for(int g = 0; g < 6; g++)
IN >> a[s][g];
With this, I can get the grade for student stu
on homework assignment hwa as
array[stu][hwa]. This
program is a simple one that reads the grade info and allows
the user to ask questions about grades.
This version makes nice use of functions,
and gives you an idea of how we pass multi-dimensional arrays
around for this sort of thing.
Here are three extensions
of the functionality of this program you might like to consider:
new
live on until the end of your program, or until deleted with the
delete [] command. With multi-dimensional arrays,
you have to remember to delete each array you created. That
means, if we refer back to the grades problem from above, that all
of the arrays pointed to by the elements of the array
grade must be deleted before we can delete the array
grade itself.
for(int s = 0; s < 5; s++)
delete [] a[s];
delete [] a;
~/$ ./ex1 There are 24 people. How many teams would you like? (make it evenly divide n) 3 Team 0: Mike Dan Chris Joni Christy Seung-Geol Cathy Susan Team 1: Gavin Nate Paul Adina Jeff Carl Karen Eric Team 2: Phong Betty Madeline Marianne Don Shirley Tim Steve