********************** Midterm 2 Topic Review ********************** How to use this document ======================== + All contents covered in Midterm I will not be specifically tested but will likely to be used in the questions. + Self-test using this document to see what concepts are challenging to you + Course notes document is the main resource for tips, pitfalls. High priority in midterm preparation. + Review all participation activities and challenge activities in zyBook + Practice your ability to finish the patterns listed here from scratch without the help from any editor/ IDE Pointer, Memory Management ========================== + Memory regions * code: code * static: global and static variables * stack: local variables and function parameters * heap: dynamic data + Pointer type * declaration; derived type with * * reference operator & (variable -> it's memory address) * dereference operator * (memory address -> variable/lvalue it points to) * nullptr * segmentation error (trying to access an invalid pointer) + Dynamic data * new keyword * delete keyword * new and delete arrays with [] * memory leak and how to avoid + Differentiate from reference type * revisit reference type * know the difference Algorithms ========== + C array * local array ``int arr[10];`` - size must be literal or constant * dynamic array ``int *arr = new int[10];`` * [] and * syntax interconversion ``arr[n]`` vs ``*(arr + n)`` * two parts in memory: pointer and data - local array - both parts are local - dynamic array - pointer is local, data is in heap * local array initialization syntax ``int arr[10] = {};`` * initialization of dynamic arrays using ``for`` loops * local/dynamic arrays as function parameters * dynamic array as as return type + C string * partially filled char array * terminator '\\0' character * cstring header - strlen - strcmp - strcpy - strcat + C++ string * methods (member functions) * extraction getline mixed usage - do-while loop to protect getline + Building blocks of algorithms * for loops * while loops * degree of freedom * index manipulation ``size - 1 - i`` * know the meaning of looping variables + Algorithms on linear data types (C array, C string, and C++ string) * search - element - sub sequence - early return * compare - two arrays - are same or are reverse - internal - is a palindrome - early return * aggregate/reduce - sequence -> single value - must visit all element * map - sequence -> sequence of the same size - can be in-place * filter - sequence -> shorter sequence - to be covered when vector is introduced * sort - selection - insertion Advanced Array ============== + Multidimensional array * array of arrays concept (diagrams) * declaration * initialization with nested loops * for loop manipulation - nested * dynamic 2D array - new [] - delete [] - for loop * as function parameters - [] syntax - last size can be omitted - * syntax (preferred) * as a return value - dynamic array * algorithms - tasks done on each row/column - flip vertically/horizontally - transpose + Object array * to model 2D relational table (like excel tables) * temporary object assignment ``patients[i] = Patient("John Smith", 21, 173);`` Frequently Tested Contents ========================== + **must be able to finish coding on paper or plain text editor like notepad** + **Write a full program project in a single file** + **Write a full program project with multiple files** + text menu handling + input with validation + expressions with pointer/array * know pointer operators \*, & * example expressions - e.g. if ``int *a = &b``, the ``*a`` is same as ``b`` - ``arr[n]`` ``*(arr + n)`` - ``(*a)++`` + C string algorithms * char array declaration * for loop based on the terminator '\\0' * 1 extra space to store data * existing string functions: strlen, strcpy, strcmp, strcat + dynamic array * why using dynamic array * memory allocation with new * memory release with delete [] + difference of in-place vs out-of-place algorithms + 1D array algorithms **IMPORTANT** Know how to write; know how to mimic the run on paper. * search * compare two arrays, compare internally * sort * aggregate/reduce - sum, average, count, etc. * map + array as function parameter + dynamic array as the returned value of a function + user input with mixed extractions and getlines + 2D array * as function parameters **very tricky!** * allocation using for loop * delete using for loop * initialization using for loops + 2D array algorithms * flip * transpose * rotate * initialize to a specific format Pitfalls ======== + pointer * referring to an uninitialized pointer * mismatched assignment, parameter passing - ``int *a = b; // b is an int`` + array * out of boundary index ``cout << arr[size];`` * mismatched passing - ``cout << average(arr[size], size);`` - ``cout << average(arr[], size);`` * pass without size ``cout << average(arr);`` * Java syntax ``int []arr;`` ``double average(double [] arr, int size);`` * using initialization syntax for assignment ``int arr[4]; arr = {1,2,3,4};`` + 2d array * new with more than one [] ``int **twoD = new int[3][4]`` * bad function parameter - ``void flip(int twoDimArr[rows][cols], int rows, int cols);`` - ``void flip(int twoDimArr[][], int rows, int cols);`` - ``void flip(int [][] twoDimArr, int rows, int cols);`` + dynamic array * Java syntax ``int [] arr = new int[10];`` * forget to ``delete []`` * use ``delete`` without ``[]`` * 2D - new or delete using more than one []