The elements of an array can be of any data type, including arrays! An array of arrays is called a multidimensional array.
1 |
int array[3][5]; // a 3-element array of 5-element arrays |
Since we have 2 subscripts, this is a two-dimensional array.
In a two-dimensional array, it is convenient to think of the first (left) subscript as being the row, and the second (right) subscript as being the column. This is called row-major order. Conceptually, the above two-dimensional array is laid out as follows:
[0][0] [0][1] [0][2] [0][3] [0][4] // row 0 [1][0] [1][1] [1][2] [1][3] [1][4] // row 1 [2][0] [2][1] [2][2] [2][3] [2][4] // row 2
To access the elements of a two-dimensional array, simply use two subscripts:
1 |
array[2][3] = 7; |
Initializing two-dimensional arrays
To initialize a two-dimensional array, it is easiest to use nested braces, with each set of numbers representing a row:
1 2 3 4 5 6 |
int array[3][5] = { { 1, 2, 3, 4, 5, }, // row 0 { 6, 7, 8, 9, 10, }, // row 1 { 11, 12, 13, 14, 15 } // row 2 }; |
When the C++ compiler processes this initializer list, it actually ignores the inner braces altogether. However, we highly recommend you use them anyway for readability purposes.
Two-dimensional arrays with initializer lists can omit (only) the leftmost size specification:
1 2 3 4 5 6 |
int array[][5] = { { 1, 2, 3, 4, 5, }, { 6, 7, 8, 9, 10, }, { 11, 12, 13, 14, 15 } }; |
The compiler can do the math to figure out what the array size is. However, the following is not allowed:
1 2 3 4 5 |
int array[][] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; |
Because the inner parenthesis are ignored, the compiler can not tell whether you intend to declare a 1×8, 2×4, 4×2, or 8×1 array in this case.
Just like normal arrays, multidimensional arrays can still be initialized to 0 as follows:
1 |
int array[3][5] = { 0 }; |
Note that this only works if you explicitly declare the size of the array! Otherwise, you will get a two-dimensional array with 1 row.
Accessing elements in a two-dimensional array
Accessing all of the elements of a two-dimensional array requires two loops: one for the row, and one for the column. Since two-dimensional arrays are typically accessed row by row, the row index is typically used as the outer loop.
1 2 3 |
for (int row = 0; row < numRows; ++row) // step through the rows in the array for (int col = 0; col < numCols; ++col) // step through each element in the row std::cout << array[row][col]; |
In C++11, for each loops can also be used with multidimensional arrays. Similar to the for loop above, this requires using nested for each loops:
1 2 3 4 5 |
for (auto row: array) // for each row in the array for (auto element: row) // for each element in the row std::cout << element; // Note: row and element should ideally be references, but we haven't covered those yet. |
Multidimensional arrays larger than two dimensions
Multidimensional arrays may be larger than two dimensions. Here is a declaration of a three-dimensional array:
1 |
int array[5][4][3]; |
Three-dimensional arrays are hard to initialize in any kind of intuitive way using initializer lists, so it’s typically better to initialize the array to 0 and explicitly assign values using nested loops.
Accessing the element of a three-dimensional array is analogous to the two-dimensional case:
1 |
std::cout << array[3][1][2]; |
A two-dimensional array example
Let’s take a look at a practical example of a two-dimensional array:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <iostream> int main() { // Declare a 10x10 array const int numRows = 10; const int numCols = 10; int product[numRows][numCols] = { 0 }; // Calculate a multiplication table for (int row = 0; row < numRows; ++row) for (int col = 0; col < numCols; ++col) product[row][col] = row * col; // Print the table for (int row = 1; row < numRows; ++row) { for (int col = 1; col < numCols; ++col) std::cout << product[row][col] << "\t"; std::cout << '\n'; } return 0; } |
This program calculates and prints a multiplication table for all values between 1 and 9 (inclusive). Note that when printing the table, the for loops start from 1 instead of 0. This is to omit printing the 0 column and 0 row, which would just be a bunch of 0s! Here is the output:
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
Two dimensional arrays are commonly used in tile-based games, where each array element represents one tile. They’re also commonly in 3d computer graphics (as matrices) in order to rotate, scale, and reflect shapes.
![]() |
![]() |
![]() |
Please help... I have a migraine from trying to do this homework. Could you please help?
Write a C++ program that finds and displays the maximum value
in a two-dimensional array of integers. The array should be declared as a 4-by-5 array of
integers and initialized with the data 16, 22, 99, 4, 18, -258, 4, 101, 5, 98, 105, 6, 15, 2,
45, 33, 88, 72, 16, and 3.
#include
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
int array [] = {16, 22, 99, 4, 18, -258, 4, 101, 5, 98, 105, 6, 15, 2, 45, 33, 88, 72, 16, 3};
{
for(int j = 0; j < array[i].length; j++)
{
if(max < array[i][j])
{
max = array[i][j];
}
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
I saw this and used this as practice. Here's the solution in case anyone wants it. Let me know if you find a better way.
int search()
{
int array [4][5] = {16, 22, 99, 4, 18, -258, 4, 101, 5, 98, 105, 6, 15, 2, 45, 33, 88, 72, 16, 3};
int xo = 0;
int xi = 0;
for(int nRow = 0; nRow < 4; nRow++)
{
for(int nCol = 0; nCol xo)
{xo = xi;}
}
}
return xo;
}
Hi guys.
Im a beginner and have a project similar to the one described above. For the above project, how do you put all the for loop part into a function? Say if you had multiple arrays of different values, but all of the same size?
anArray[2][3] = 7;
int anArray[3][5] =
{
{ 1, 2, 3, 4, 5, }, // row 0
{ 6, 7, 8, 9, 10, }, // row 1
{ 11, 12, 13, 14, 15 } // row 2
};
Just curious wouldnt anArray[2][3] = 14? if i am understanding how this works properly
i.e in matrix form i want to print the output...please help me out...
If you want help, you better provide us with your code, because I have no idea how your code works.
Hi Alex..I am a begginer in C++. I have written a code to add matrices,the code is all fine the only problem is that when i m printing the output it is looking something like this 12 12 12 12 12 instead of this i want it as 12 12 12
12 12 12
12 12 12..Can u please help me...
How to convert an array of 2 dimensions to one dimension?
Great, but if you don't know the length of the actual number of rows, the outer loop can't be a "for" loop. How could a "while" be controlled when filling an array from a file?
Arrays have to be initialized with the dimension size. In a later lesson you learn how to do this at run time instead of at the time it's compiled. In either case, the size does have to be dimensions do have to be known beforehand.
You can use a function or a class to determine the length and number of rows from the file.
I will give two kinds of methods (one is similar to the author's, but a bit shorter)
The first method just takes the cout into the loop as well.
The second is just the stupid-way to do this problem, using additional instead.
in multidimensional array ,
one column contain a integer,
another column contain a string,
how we declare an array to accept a value