CIS-60 Home http://www.c-jump.com/CIS60/CIS60syllabus.htm
Topics include:
Array Navigation
Array Initialization
Arrays and STL Algorithms
Multidimensional Arrays
typename a[ size ]; // array declaration
typename a[ size ] = { V1, V2, ..., Vn }; // initializer
a[ sub ] = x; // element access
x = a[ sub ];
sizeof( a ); // array size in bytes
sizeof( a )/sizeof( typename ); // array size
To create an array of ten integers, declare it like this:
int a[ 10 ];
C++ array has the following properties:
number of elements is constant
sizeof( a ) returns size of array a in bytes.
sizeof( a ) / sizeof( int ) returns the number of elements in the array.
What do we know about elements of the array ? For example,
int a[ 10 ];
C++ array is zero-based: its elements are indexed from zero to size - 1
a[ 0 ] could be pronounced as
element sub zero
first element of a
zeroeth element of a
initial element of a
#include <iostream>
using namespace std;
int main()
{
const int SIZE = 5;
char carr[ SIZE ]; // array of five characters
for ( int idx = 0; idx < SIZE; ++idx ) {
carr[ idx ] = 'A' + idx; // change element value
cout << carr[ idx ]; // display element value
}
return 0;
}
Array initializer provides a list of array values:
char carr[ ] = { 'a', 'b', 'c', 0 }; // ok: size is calculated
int iarr[ 2 ] = { 5 }; // ok: same as { 5, 0 }
float fa[ 3 ] = { x, y, z }; // variable initializers ok
int ibad[ 2 ] = { 1, 2, 3 }; // error: too many initializers
ibad[ 2 ] = { 10, 20 }; // error: no initializer-assignments
Arrays can be manipulated by STL algoritms:
#include <algorithm>
STL internet resources:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
const int SIZE = 5;
int dummy[ SIZE ] = { 5, 10, 5, 5, 10 };
int cnt = std::count( dummy, dummy + SIZE, 5 );
std::cout
<< "Array has "
<< cnt
<< " values that are equal to 5."
<< '\n'
;
return 0;
}
/*Program output:
Array has 3 values that are equal to 5.
*/
array name is the address of the zeroth element
array name is a constant address
a[ 1 ] is equivalent to ( a + 1 )[ 0 ]
a[ n ] is equivalent to *( a + n )
Half-open address range concept:
int a[ 10 ] = { 15, 20, 25, 30, 35, 40, 45, 50, 55, 60 };
| a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] | |
| 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | ??? |
(a + 10) is the address one-beyond the end of an array.
#include <iostream>
#include <algorithm> // STL algoritms
#include <iterator> // for std::ostream_iterator
int main()
{
const int SIZE = 5;
int iarr[ SIZE ] = { 1, 2, 3 };
int dummy[ SIZE ] = { 0 };
std::copy( // Copy elements from iarr to dummy
iarr,
iarr + SIZE,
dummy
);
std::copy( // Display elements of dummy array
dummy,
dummy + SIZE,
std::ostream_iterator< int >( std::cout, "\t" )
);
return 0;
}
/* Program output:
1 2 3 0 0
*/
|
|
The program continuously prints random numbers between 0 and 9:
6 8 5 5 0 1 5
1 4 3 5 9 6 2
7 6 3 1 9 1 4
8 6 9 6 1 9 4
3 3 1 0 4 7 3
1 9 3 7 8 7 4
6 2 7 6 9 0 7
5 8 1 3 1 4 3
7 4 4 1 6 2 3
4 5 3 5 8 7 1
6 8 2 6 4 4 2
#include <iostream>
#include <cstdlib> // for rand() and srand()
#include <ctime>
#include <algorithm>
#include <iterator> // for std::ostream_iterator
// frand returns pseudo-random numbers 0 to 9:
int frand( int ) { return rand() % 10; }
int main()
{
srand( (unsigned)time( 0 ) );
const int SIZE = 5;
int dummy[ SIZE ];
// Populate array dummy with random numbers:
std::transform(
dummy,
dummy + SIZE,
dummy,
frand
);
// Display elements of dummy:
std::copy(
dummy,
dummy + SIZE,
std::ostream_iterator< int >( std::cout, "\t" )
);
return 0;
}
/* Program output:
5 8 7 9 7
*/
#include <iostream>
#include <algorithm>
int main()
{
int dummy[] = { 1, 2, 3, 4, 5 };
// Swap elements:
std::swap( dummy[ 0 ], dummy[ 4 ] );
// Display elements of dummy array:
std::cout
<< dummy[ 0 ]
<< '\t'
<< dummy[ 4 ]
<< '\n'
;
return 0;
}
/* Program output:
5 1
*/
|
|
Two-dimensional array with three rows and four columns,
int a[3][4];
can be illustrated as follows:
 
|
|
Multidimensional arrays are arrays of arrays:
int good[3][4]; // three arrays of arrays of four integers
int bad[3,4]; // bad syntax, compile-time error
Two-dimensional array is really a one-dimensional array, each of whose elements is an array.
The subscripts are written as
x = a[ i ][ j ]; // correct: a[row][column]
rather than
x = a[ i, j ]; // compile-time error
 
If the array is to be passed to a function f, the declaration of f would look like:
void f( int daytab[2][13] );
or it could also be written as
void f( int daytab[ ][13] );