# Lesson 7 - University of Texas at Dallas

Lesson 7 Arrays CS 1 Lesson 7 -- John Cole 1 Arrays Hold Multiple Values Array: variable that can store multiple values of the same type Values are stored in adjacent memory locations. If a variable is the name of a memory location, an array is the name of a group of them.

Declared using [] operator: int tests[5]; CS 1 Lesson 7 -- John Cole 2 Array - Memory Layout The definition: int tests[5]; allocates the following memory: CS 1 Lesson 7 -- John Cole

3 Array Terminology In the definition int tests[5]; int is the data type of the array elements tests is the name of the array 5, in [5], is the size declarator. It shows the number of elements in the array. The size of an array is (number of elements) * (size of each element) CS 1 Lesson 7 -- John Cole 4

Array Terminology The size of an array is: the total number of bytes allocated for it (number of elements) * (number of bytes for each element) Examples: int tests[5] is an array of 20 bytes, assuming 4 bytes for an int long double measures[10]is an array of 80 bytes, assuming 8 bytes for a long double CS 1 Lesson 7 -- John Cole

5 Size Declarators Named constants are commonly used as size declarators. const int SIZE = 5; int tests[SIZE]; This eases program maintenance when the size of the array needs to be changed. CS 1 Lesson 7 -- John Cole 6

Accessing Array Elements Each element in an array is assigned a unique subscript. Subscripts start at 0 subscripts : CS 1 Lesson 7 -- John Cole 7 Accessing Array Elements The last elements subscript is n-1 where n is the number of elements in the array.

subscripts : CS 1 Lesson 7 -- John Cole 8 Accessing Array Elements Array elements can be used as regular variables: tests[0] = 79; cout << tests[0]; cin >> tests[1]; tests[4] = tests[0] + tests[1];

Arrays must be accessed via individual elements: cout << tests; // not legal CS 1 Lesson 7 -- John Cole 9 Accessing Array Contents Can access element with a constant or literal subscript: cout << tests[3] << endl; Can use integer expression as subscript: int i = 5;

cout << tests[i] << endl; CS 1 Lesson 7 -- John Cole 10 Looping Through an Array Example The following code defines an array, numbers, and assigns values 1 to n to each element: const int ARRAY_SIZE = 5; int numbers[ARRAY_SIZE]; for (int count = 0; count < ARRAY_SIZE; count++) numbers[count] = count + 1;

CS 1 Lesson 7 -- John Cole 11 Default Initialization Global array all elements initialized to 0 by default Local array all elements uninitialized by default CS 1 Lesson 7 -- John Cole 12

No Bounds Checking in C++ When you use a value as an array subscript, C++ does not check it to make sure it is a valid subscript. In other words, you can use subscripts that are beyond the bounds of the array. This can corrupt memory and other variables, causing unpredictable results. When using Visual Studio in debug mode, there is some checking, but not like in Java. CS 1 Lesson 7 -- John Cole 13

Example of no Bounds Checking The following code defines a three-element array, and then writes five values to it! CS 1 Lesson 7 -- John Cole 14 Off-By-One Errors An off-by-one error happens when you use array subscripts that are off by one. This can happen when you start subscripts at 1 rather than 0:

// This code has an off-by-one error. const int SIZE = 100; int numbers[SIZE]; for (int count = 1; count <= SIZE; count++) numbers[count] = 0; CS 1 Lesson 7 -- John Cole 15 Array Initialization Arrays can be initialized with an initialization list: const int SIZE = 5; int tests[SIZE] = {79,82,91,77,84};

The values are stored in the array in the order in which they appear in the list. The initialization list cannot exceed the array size. CS 1 Lesson 7 -- John Cole 16 Common Example const int MONTHS = 12; int months[MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

if (year % 4 == 0) months[1] = 29; months[1] = year % 4 == 0 ? 29 : 28; CS 1 Lesson 7 -- John Cole 17 Partial Array Initialization If array is initialized with fewer initial values than the size declarator, the remaining elements will be set to 0: CS 1 Lesson 7 -- John Cole

18 Implicit Array Sizing Can determine array size by the size of the initialization list: int quizzes[]={12,17,15,11}; Must use either array size declarator or initialization list at array definition CS 1 Lesson 7 -- John Cole 19

Processing Array Contents Array elements can be treated as ordinary variables of the same type as the array When using ++, -- operators, dont confuse the element with the subscript: tests[i]++; // add 1 to tests[i] tests[i++]; // increment i, no // effect on tests CS 1 Lesson 7 -- John Cole 20

Array Assignment To copy one array to another, Dont try to assign one array to the other: newTests = tests; // Won't work Instead, assign element-by-element: for (i = 0; i < ARRAY_SIZE; i++) newTests[i] = tests[i]; CS 1 Lesson 7 -- John Cole 21

Printing the Contents of an Array You can display the contents of a character array by sending its name to cout: char fName[] = "Henry"; cout << fName << endl; But, this ONLY works with character arrays! CS 1 Lesson 7 -- John Cole 22 Printing the Contents of an Array For other types of arrays, you must print

element-by-element: for (i = 0; i < ARRAY_SIZE; i++) cout << tests[i] << endl; CS 1 Lesson 7 -- John Cole 23 Summing and Averaging Array Elements Use a simple loop to add together array elements: int tnum; double average, sum = 0; for(tnum = 0; tnum < SIZE; tnum++)

sum += tests[tnum]; Once summed, can compute average: average = sum / SIZE; CS 1 Lesson 7 -- John Cole 24 Finding the Largest Value in an Array int count; int largest; largest = numbers[0]; for (count = 1; count < SIZE; count+

+) { if (numbers[count] > largest) largest = numbers[count]; } CS 1 Lesson 7 -- John Cole 25 Finding the Smallest Value in an Array int count; int smallest; smallest = numbers[0]; for (count = 1; count < SIZE; count+

+) { if (numbers[count] < smallest) smallest = numbers[count]; } CS 1 Lesson 7 -- John Cole 26 Partially-Filled Arrays If you dont know how much data an array will be holding: Make the array large enough to hold the largest expected number of elements.

Use a counter variable to keep track of the number of items stored in the array. CS 1 Lesson 7 -- John Cole 27 Comparing Arrays To compare two arrays, you must compare element-by-element const int SIZE = 5; int firstArray[SIZE] = { 5, 10, 15, 20, 25 }; int secondArray[SIZE] = { 5, 10, 15, 20, 25 }; bool arraysEqual = true; // Flag variable

int count = 0; // Loop counter variable // Compare the two arrays. while (arraysEqual && count < SIZE) { if (firstArray[count] != secondArray[count]) arraysEqual = false; count++; } if (arraysEqual) cout << "The arrays are equal.\n"; else cout << "The arrays are not equal.\n";

CS 1 Lesson 7 -- John Cole 28 Arrays as Function Arguments To pass an array to a function, just use the array name: showScores(tests); To define a function that takes an array parameter, use empty [] for array argument: void showScores(int // function void showScores(int

// function []); prototype tests[]) header CS 1 Lesson 7 -- John Cole 29 Modifying Arrays in Functions Array names in functions are like reference variables changes made to array in a

function are reflected in actual array in calling function Need to exercise caution that array is not inadvertently changed by a function CS 1 Lesson 7 -- John Cole 30 Two-Dimensional Arrays Can define one array for multiple sets of data Like a table in a spreadsheet Use two size declarators in definition: const int ROWS = 4, COLS = 3;

int exams[ROWS][COLS]; First declarator is number of rows; second is number of columns CS 1 Lesson 7 -- John Cole 31 Two-Dimensional Array Representation Two-Dimensional Array Representation columns r o w

s Use two subscripts to access element: exams[2][2] = 86; CS 1 Lesson 7 -- John Cole 32 2D Array Initialization Two-dimensional arrays are initialized row-by-row: const int ROWS = 2, COLS = 2; int exams[ROWS][COLS] = { {84, 78}, {92, 97} };

Can omit inner { }, some initial values in a row array elements without initial values will be set to 0 or NULL CS 1 Lesson 7 -- John Cole 33 Two-Dimensional Array as Parameter, Argument Use array name as argument in function call: getExams(exams, 2); Use empty [] for row, size declarator for column in prototype, header:

const int COLS = 2; // Prototype void getExams(int [][COLS], int); // Header void getExams(int exams[][COLS], int rows) CS 1 Lesson 7 -- John Cole 34 Summing All the Elements in a Dimensional Array Two-

Given the following definitions: const int NUM_ROWS = 5; // Number of rows const int NUM_COLS = 5; // Number of columns int total = 0; // Accumulator int numbers[NUM_ROWS][NUM_COLS] = {{2, 7, 9, 6, 4}, {6, 1, 8, 9, 4}, {4, 3, 7, 2, 9}, {9, 9, 0, 3, 1}, {6, 2, 7, 4, 1}}; CS 1 Lesson 7 -- John Cole

35 Summing All the Elements in a Dimensional Array Two- // Sum the array elements. for (int row = 0; row < NUM_ROWS; row++) { for (int col = 0; col < NUM_COLS; col++) total += numbers[row][col]; }

// Display the sum. cout << "The total is " << total << endl; CS 1 Lesson 7 -- John Cole 36 Arrays with Three or More Dimensions Can define arrays with any number of dimensions: short rectSolid[2][3][5]; double timeGrid[3][4][3][4];

When used as parameter, specify all but 1st dimension in prototype, heading: void getRectSolid(short [][3][5]); CS 1 Lesson 7 -- John Cole 37 Dynamic Arrays You can allocate an array dynamically. Use this when you dont know the dimensions at compile time int* square = new int[order,order]; square[iRow, iCol] = 0;

CS 1 Lesson 7 -- John Cole 38 Introduction to the STL vector A data type defined in the Standard Template Library (covered more in Chapter 16) Can hold values of any type: vector scores; Automatically adds space as more is needed no need to determine size at definition Can use [] to access elements

CS 1 Lesson 7 -- John Cole 39 Declaring Vectors You must #include Declare a vector to hold int element: vector scores; Declare a vector with initial size 30: vector scores(30); Declare a vector and initialize all elements to 0:

vector scores(30, 0); Declare a vector initialized to size and contents of another vector: vector finals(scores); CS 1 Lesson 7 -- John Cole 40 Adding Elements to a Vector Use push_back member function to add element to a full array or to an array that had no defined size:

scores.push_back(75); Use size member function to determine size of a vector: howbig = scores.size(); CS 1 Lesson 7 -- John Cole 41 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 function: while (!scores.empty()) ... CS 1 Lesson 7 -- John Cole 42 Other Useful Member Functions

CS 1 Lesson 7 -- John Cole 43

## Recently Viewed Presentations

• Genetic Exchange. Conjugation -transfer DNA through contact. Transformation - acquire DNA from dead bacteria . Transduction - DNA is transferred from one bacteria to another using a virus (genetic engineering)
• YOU CAN DO MORE FOR EXTRA CREDIT! 5 extra=1 free bathroom pass and 10% extra credit points to be added to any assignment 10 extra=1 free bathroom pass AND 20% extra credit points to be added to any assignment Most...
• Ô ma douce moitié. Voulant, ô ma douce moitié, T'assurer que mon amitié Ne se verra jamais finie, Je fis, pour t'en assurer mieux Un serment juré par mes yeux Et par mon cœur et par ma vie.Tu jures ce...
• A system in zero state cannot generate any response for zero input. Zero state corresponds to initial conditions being zero. Zero-input response. Response when . f (t) = 0. Results from internal system conditions only. Independent of . f (t)...
• Times New Roman Tahoma Wingdings Arial Symbol Blueprint Microsoft Excel Worksheet Reading List Slide 2 Registers Standard Register Conventions Register Conventions in the MIPS Slide 6 MIPS Operations MIPS Instruction Formats Fields in MIPS Instructions Slide 10 ALU ops Machine...
• Figure 9.20 The Hebbian synapse. When one cell consistently activates another, the connection between them is strengthened. If it consistently fails to do so, the connection between them is unchanged or weakened. FIGURE 9.20 The Hebbian synapse. When one cell...
• Hedgehog / fox style collaborators. Subfields that offer more flexibility for unestablished authors vs those that require more training. Stated a theory of collaboration styles and described how to use the system to identify these
• Peter Slade "Düşünce Oyunu" denilen bir oyun yaratmıştır. Bu oyunu çocuklardan yetişkinlere kadar her yaş grubuyla yapılan çalışmalarda başlangıç için yararlı bulmuştur. Oyunda öğretmen, çocuklardan kendisine bir fikir vermelerini ister; bu bir ya da birkaç kelimeyle olabilir.