#include <iostream> // Includes the standard input/output stream library
int main() {
    // Output text to the console using cout
    std::cout << "Hello, World!" << std::endl;
    // Declare a variable to store user input
    std::string name;
    // Prompt the user for input
    std::cout << "Enter your name: ";
    // Read input from the user and store in 'name'
    std::cin >> name;
    // Greet the user with their name
    std::cout << "Welcome, " << name << "!" << std::endl;
    return 0; // Indicates successful execution
}
#include <iostream>
int main() {
    // Declare integer variables
    int a = 5;
    int b = 3;
    // Perform arithmetic operations
    int sum = a + b;
    int diff = a - b;
    int product = a * b;
    int quotient = a / b;
    std::string s = "hello"; 
    // Declare a constant
    const float pi = 3.14159f;
    // Output the results
    std::cout << "Sum: " << sum << std::endl;
    std::cout << "Difference: " << diff << std::endl;
    std::cout << "Product: " << product << std::endl;
    std::cout << "Quotient: " << quotient << std::endl;
    std::cout << "Constant pi: " << pi << std::endl;
    return 0;
}
string requires std usage 
Useful string functions
length()
substr(1,2)
erase()
find('text')
#include <iostream>
int main() {
    int age;
    // Ask the user for their age
    std::cout << "Enter your age: ";
    std::cin >> age;
    // Use conditional statements to evaluate input
    if (age >= 18) {
        std::cout << "You are an adult." << std::endl;
    } else if (age >= 13) {
        std::cout << "You are a teenager." << std::endl;
    } else {
        std::cout << "You are a child." << std::endl;
    }
    return 0;
}
#include <iostream>
int main() {
    int n;
    // Ask user for how many numbers to sum
    std::cout << "Enter a number: ";
    std::cin >> n;
    int sum = 0;
    // Loop from 1 to n and accumulate the sum
    for (int i = 1; i <= n; i++) {
        sum += i; // Equivalent to sum = sum + i
    }
    std::cout << "The sum of numbers from 1 to " << n << " is " << sum << std::endl;
    return 0;
}
#include <iostream>
// Function that adds two integers and returns the result
int add(int x, int y) {
    return x + y;
}
// Function that modifies a value using a pointer
void doubleValue(int* ptr) {
    *ptr = *ptr * 2; // Dereference and double the value
}
int main() {
    // Demonstrate function call
    int result = add(10, 5);
    std::cout << "Sum from function: " << result << std::endl;
    // Demonstrate pointer manipulation
    int num = 7;
    std::cout << "Before doubling: " << num << std::endl;
#include <iostream>
    // Pass address of 'num' to the function
    doubleValue(&num);
    std::cout << "After doubling: " << num << std::endl;
    return 0;
}
std::vector and Iteration#include <iostream>
#include <vector>
int main() {
    // Create a dynamic array (vector) to hold integers
    std::vector<int> numbers;
    // Populate the vector with user input
    int input;
    std::cout << "Enter 5 numbers:" << std::endl;
    for (int i = 0; i < 5; ++i) {
        std::cin >> input;
        numbers.push_back(input); // Append to the vector
    }
    // Calculate the average of the elements
    int sum = 0;
    for (int num : numbers) {
        sum += num;
    }
    float average = static_cast<float>(sum) / numbers.size();
    std::cout << "Average: " << average << std::endl;
    return 0;
}
useful vector functions:
at()         -  Return an indexed element from a vector
back()       -  Return iterator pointing to end of vector
begin()      -  Return iterator pointing to start of vector
pop_back()   -  Remove last item in vector
size()       -  Return number of elements within a vector
#include <iostream>
#include <string>
// Define a struct to represent a person
struct Person {
    std::string name;
    int age;
};
int main() {
    // Declare and initialize a struct instance
    Person student;
    
    std::cout << "Enter your name: ";
    std::getline(std::cin, student.name); // Read full line (including spaces)
    std::cout << "Enter your age: ";
    std::cin >> student.age;
    // Display the struct's content
    std::cout << "Student Info - Name: " << student.name << ", Age: " << student.age << std::endl;
    return 0;
}
#include <iostream>
#include <fstream>
#include <string>
int main() {
    std::string filename = "example.txt";
    // Write to a file
    std::ofstream outfile(filename); // Open for output
    if (outfile.is_open()) {
        outfile << "This is a test.\n";
        outfile << "Written by C++.\n";
        outfile.close(); // Close after writing
    } else {
        std::cerr << "Failed to open file for writing." << std::endl;
    }
    // Read from the file
    std::ifstream infile(filename); // Open for input
    if (infile.is_open()) {
        std::string line;
        while (std::getline(infile, line)) {
            std::cout << line << std::endl;
        }
        infile.close(); // Close after reading
    } else {
        std::cerr << "Failed to open file for reading." << std::endl;
    }
    return 0;
}
#include <iostream>
int main() {
    int size;
    std::cout << "Enter the size of the array: ";
    std::cin >> size;
    // Dynamically allocate an array of integers
    int* arr = new int[size];
    // Fill the array
    for (int i = 0; i < size; ++i) {
        arr[i] = (i + 1) * 10;
    }
    // Display contents
    std::cout << "Array contents: ";
    for (int i = 0; i < size; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
    // Free the allocated memory
    delete[] arr;
    return 0;
}
Any time you use the new keyword, you should use delete to free the allocated memory>
math_utils.h (header file):
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
int multiply(int a, int b);
#endif
math_utils.cpp (implementation):
#include "math_utils.h"
int add(int a, int b) {
    return a + b;
}
int multiply(int a, int b) {
    return a * b;
}
main.cpp (main file):
#include <iostream>
#include "math_utils.h"
int main() {
    int x = 4, y = 5;
    std::cout << "Addition: " << add(x, y) << std::endl;
    std::cout << "Multiplication: " << multiply(x, y) << std::endl;
    return 0;
}
Compile all three files together:
g++ main.cpp math_utils.cpp -o program
#include <iostream>
// Define a function template that works with any type
template <typename T>
T maxValue(T a, T b) {
    return (a > b) ? a : b;
}
int main() {
    std::cout << "Max (int): " << maxValue(10, 20) << std::endl;
    std::cout << "Max (double): " << maxValue(5.5, 2.3) << std::endl;
    std::cout << "Max (char): " << maxValue('a', 'z') << std::endl;
    return 0;
}
Concepts demonstrated:
#include <iostream>
#include <fstream>
// A wrapper class that opens a file and closes it automatically
class FileLogger {
private:
    std::ofstream file;
public:
    FileLogger(const std::string& filename) {
        file.open(filename);
        if (!file) {
            throw std::runtime_error("Unable to open file");
        }
    }
    void log(const std::string& message) {
        file << message << std::endl;
    }
    ~FileLogger() {
        if (file.is_open()) {
            file.close(); // Automatically closes the file
        }
    }
};
int main() {
    try {
        FileLogger logger("log.txt");
        logger.log("This is a log message.");
        logger.log("Resource management done right.");
    } catch (const std::exception& e) {
        std::cerr << "Error: " << e.what() << std::endl;
    }
    return 0;
}
Concepts demonstrated:
#include <iostream>
#include <vector>
#include <algorithm>
// A custom functor (function object)
struct IsEven {
    bool operator()(int x) const {
        return x % 2 == 0;
    }
};
int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5, 6};
    // Use lambda to print all numbers
    std::cout << "All numbers: ";
    std::for_each(numbers.begin(), numbers.end(), [](int x) {
        std::cout << x << " ";
    });
    std::cout << std::endl;
    // Count how many even numbers using the functor
    int evens = std::count_if(numbers.begin(), numbers.end(), IsEven());
    std::cout << "Even numbers count: " << evens << std::endl;
    return 0;
}
Concepts demonstrated:
for_each, count_if)#include <iostream>
#include <memory>
class Resource {
public:
    Resource() {
        std::cout << "Resource acquired" << std::endl;
    }
    ~Resource() {
        std::cout << "Resource destroyed" << std::endl;
    }
    void greet() {
        std::cout << "Hello from resource!" << std::endl;
    }
};
int main() {
    std::shared_ptr<Resource> ptr1 = std::make_shared<Resource>();
    {
        std::shared_ptr<Resource> ptr2 = ptr1; // Shared ownership
        ptr2->greet();
        std::cout << "Reference count: " << ptr1.use_count() << std::endl;
    }
    std::cout << "Back to main scope. Reference count: " << ptr1.use_count() << std::endl;
    return 0;
}
Concepts demonstrated:
std::shared_ptrdeletestd::thread#include <iostream>
#include <thread>
// A function that will run in a separate thread
void task(int id) {
    std::cout << "Thread " << id << " is running" << std::endl;
}
int main() {
    std::thread t1(task, 1);
    std::thread t2(task, 2);
    // Wait for both threads to complete
    t1.join();
    t2.join();
    std::cout << "Main thread finished" << std::endl;
    return 0;
}
Concepts demonstrated:
join()std::variant and std::visit for Type-Safe Unions#include <iostream>
#include <variant>
// Define a variant that can hold multiple types
using Data = std::variant<int, float, std::string>;
void printData(const Data& d) {
    std::visit([](auto&& value) {
        std::cout << "Value: " << value << std::endl;
    }, d);
}
int main() {
    Data d1 = 42;
    Data d2 = std::string("C++ Advanced");
    Data d3 = 3.14f;
    printData(d1);
    printData(d2);
    printData(d3);
    return 0;
}
Concepts demonstrated:
std::variant)std::visit#include <iostream>
#include <stdexcept>
// Define a custom exception class
class InvalidOperation : public std::runtime_error {
public:
    explicit InvalidOperation(const std::string& message)
        : std::runtime_error(message) {}
};
int divide(int a, int b) {
    if (b == 0) {
        throw InvalidOperation("Division by zero is not allowed.");
    }
    return a / b;
}
int main() {
    try {
        std::cout << divide(10, 2) << std::endl;
        std::cout << divide(5, 0) << std::endl; // Will throw
    } catch (const InvalidOperation& e) {
        std::cerr << "Caught custom exception: " << e.what() << std::endl;
    }
    return 0;
}
Concepts demonstrated:
std::runtime_error#include <iostream>
class Vector2D {
public:
    float x, y;
    Vector2D(float x, float y) : x(x), y(y) {}
    // Overload the + operator
    Vector2D operator+(const Vector2D& other) const {
        return Vector2D(x + other.x, y + other.y);
    }
    // Output formatting
    void print() const {
        std::cout << "(" << x << ", " << y << ")" << std::endl;
    }
};
int main() {
    Vector2D a(2.0f, 3.0f);
    Vector2D b(1.5f, 4.5f);
    Vector2D result = a + b;
    result.print();
    return 0;
}
Concepts demonstrated:
operator+)std::map)#include <iostream>
#include <map>
#include <string>
int main() {
    std::map<std::string, int> scoreBoard;
    // Insert values
    scoreBoard["Alice"] = 100;
    scoreBoard["Bob"] = 80;
    scoreBoard["Charlie"] = 95;
    // Iterate and print
    for (const auto& entry : scoreBoard) {
        std::cout << entry.first << " : " << entry.second << std::endl;
    }
    // Lookup
    std::string name = "Alice";
    if (scoreBoard.find(name) != scoreBoard.end()) {
        std::cout << name << "'s score: " << scoreBoard[name] << std::endl;
    }
    return 0;
}
Concepts demonstrated:
forstd::regex#include <iostream>
#include <regex>
#include <string>
int main() {
    std::string input;
    std::regex pattern(R"(\w+@\w+\.\w+)"); // Simple email regex
    std::cout << "Enter an email address: ";
    std::getline(std::cin, input);
    if (std::regex_match(input, pattern)) {
        std::cout << "Valid email format." << std::endl;
    } else {
        std::cout << "Invalid email format." << std::endl;
    }
    return 0;
}
Concepts demonstrated:
std::regex