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
loopslocal/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 asb
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 []