Array size and bounds in C++ - Time & Space Complexity
When working with arrays, knowing how the size affects operations is important.
We want to see how the number of steps changes as the array gets bigger.
Analyze the time complexity of the following code snippet.
int sumArray(int arr[], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return sum;
}
This code adds up all the numbers in an array of given size.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Adding each element of the array to sum.
- How many times: Exactly once for each element, so 'size' times.
As the array gets bigger, the number of additions grows directly with its size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 additions |
| 100 | 100 additions |
| 1000 | 1000 additions |
Pattern observation: Doubling the array size doubles the work done.
Time Complexity: O(n)
This means the time to complete grows in a straight line with the array size.
[X] Wrong: "Accessing any element in the array takes longer if the array is bigger."
[OK] Correct: Accessing an element by index is always fast and does not depend on array size; only looping through all elements takes longer as size grows.
Understanding how array size affects loops is a key skill that helps you write efficient code and explain your reasoning clearly.
"What if we only summed half the array? How would the time complexity change?"
Practice
int arr[10]; in C++?Solution
Step 1: Understand array size declaration
The arrayarris declared with size 10, meaning it holds 10 elements.Step 2: Determine valid index range
In C++, array indexing starts at 0, so valid indexes are from 0 up to size-1, which is 9.Final Answer:
0 to 9 -> Option DQuick Check:
Array size 10 means indexes 0 to 9 [OK]
- Thinking indexes start at 1
- Including size as a valid index
- Confusing size with last index
Solution
Step 1: Review array declaration syntax
In C++, arrays are declared using square brackets with the size inside, likeint arr[5];.Step 2: Check each option
int arr(5); uses parentheses which is invalid for arrays. int arr = 5; assigns an int, not an array. int arr{5}; uses brace initialization but without specifying size properly.Final Answer:
int arr[5]; -> Option AQuick Check:
Array declaration uses square brackets [OK]
- Using parentheses instead of brackets
- Assigning a single int instead of array
- Confusing brace initialization with size
int arr[3] = {10, 20, 30};
std::cout << arr[3] << std::endl;Solution
Step 1: Identify array size and index used
The array has size 3, valid indexes are 0, 1, 2. The code accessesarr[3], which is out of bounds.Step 2: Understand consequences of out-of-bounds access
Accessing outside array bounds in C++ causes undefined behavior. It may print garbage, crash, or behave unpredictably.Final Answer:
Undefined behavior (may print garbage or crash) -> Option AQuick Check:
Out-of-bounds access causes undefined behavior [OK]
- Assuming arr[3] returns last element
- Expecting zero instead of garbage
- Thinking compiler catches out-of-bounds
int arr[4] = {1, 2, 3, 4};
for (int i = 0; i <= 4; i++) {
std::cout << arr[i] << " ";
}Solution
Step 1: Analyze loop bounds
The loop runs from i = 0 to i = 4 inclusive, so it tries to access arr[4].Step 2: Check array size and valid indexes
Array size is 4, valid indexes are 0 to 3. Accessing arr[4] is out of bounds and causes undefined behavior.Final Answer:
Loop condition should be i < 4, not i <= 4 -> Option CQuick Check:
Loop must use i < size to avoid out-of-bounds [OK]
- Using <= instead of < in loop condition
- Increasing array size unnecessarily
- Ignoring out-of-bounds access
Solution
Step 1: Understand function parameter requirements
To safely access array elements, the function must know the array size to avoid out-of-bounds access.Step 2: Evaluate each signature
int sumArray(int arr[], int size); passes both array and size, allowing safe iteration. int sumArray(int arr[10]); fixes size to 10, which is unsafe if actual size differs. int sumArray(int* arr); passes pointer without size, unsafe. int sumArray(int arr[]); passes array without size, unsafe.Final Answer:
int sumArray(int arr[], int size); -> Option BQuick Check:
Pass array and size to avoid out-of-bounds [OK]
- Assuming fixed size in function parameter
- Not passing size leads to unsafe access
- Using pointer without size information
Ready to prove it?
Pass the test and this pattern moves unknown
