Real-world modeling in C++ - Time & Space Complexity
When we model real-world problems in code, we want to know how long our program takes as the problem grows.
We ask: How does the work increase when the input gets bigger?
Analyze the time complexity of the following code snippet.
#include <vector>
#include <iostream>
void printPairs(const std::vector<int>& nums) {
for (int i = 0; i < nums.size(); ++i) {
for (int j = 0; j < nums.size(); ++j) {
std::cout << nums[i] << "," << nums[j] << std::endl;
}
}
}
This code prints all pairs of numbers from the input list.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Nested loops printing pairs of elements.
- How many times: Outer loop runs n times; inner loop runs n times for each outer loop.
As the input size grows, the number of pairs grows much faster.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 100 |
| 100 | 10,000 |
| 1000 | 1,000,000 |
Pattern observation: Doubling the input size makes the work about four times bigger.
Time Complexity: O(n²)
This means the work grows by the square of the input size; twice the input means about four times the work.
[X] Wrong: "Since there are two loops, the time is just twice as long as input size."
[OK] Correct: The loops are nested, so the inner loop runs fully for each outer loop step, multiplying the work, not adding.
Understanding how nested loops affect time helps you explain your code clearly and shows you can think about efficiency in real problems.
"What if we changed the inner loop to run only from j = i to the end? How would the time complexity change?"
Practice
Solution
Step 1: Understand the role of classes
Classes group data (attributes) and functions (methods) to model real-world things.Step 2: Identify the purpose in modeling
Classes help represent objects with their properties and actions clearly.Final Answer:
To represent real-world objects with attributes and behaviors -> Option BQuick Check:
Classes model objects = A [OK]
- Thinking classes only speed up code
- Confusing classes with simple variables
- Believing classes remove all errors
Car in C++?Solution
Step 1: Recall C++ class syntax
The correct syntax starts with the keywordclass, followed by the class name and braces.Step 2: Check each option
class Car { }; usesclass Car { };which is correct. Others have syntax errors.Final Answer:
class Car { }; -> Option CQuick Check:
Correct class syntax = B [OK]
- Writing 'Car class' instead of 'class Car'
- Using parentheses after class name
- Missing semicolon after class definition
class Dog {
public:
int age;
void bark() { std::cout << "Woof!"; }
};
int main() {
Dog myDog;
myDog.age = 5;
std::cout << myDog.age << " ";
myDog.bark();
return 0;
}Solution
Step 1: Analyze output statements
The code printsmyDog.agefollowed by a space, then callsbark()which prints "Woof!".Step 2: Combine outputs
Output is5plusWoof!, so result is "5 Woof!".Final Answer:
5 Woof! -> Option DQuick Check:
Print age + space + bark = 5 Woof! [OK]
- Assuming space after bark output
- Mixing order of printed values
- Ignoring no newline after prints
class Book {
string title;
int pages;
public:
void setTitle(string t) { title = t; }
void setPages(int p) { pages = p; }
};Solution
Step 1: Check usage of string type
The code usesstringwithoutstd::orusing namespace std;.Step 2: Identify missing namespace
In C++,stringis in thestdnamespace, sostd::stringis needed unless using directive is present.Final Answer:
Missing std:: before string -> Option AQuick Check:
Use std::string or using namespace std [OK]
- Forgetting std:: prefix for string
- Thinking methods must be outside class
- Believing private must come after public
Library that holds many Book objects. Which design best represents this real-world relationship in C++?Solution
Step 1: Understand the relationship
A library contains many books, so it needs a collection (like a vector) of Book objects.Step 2: Evaluate options
class Library { std::vector<Book> books; }; usesstd::vector<Book>to hold multiple books, matching the real-world model.Final Answer:
class Library { std::vector<Book> books; }; -> Option AQuick Check:
Use collection for many objects = D [OK]
- Using single object instead of collection
- Only storing count without objects
- Defining methods without data members
Ready to prove it?
Pass the test and this pattern moves unknown
