Skip to main content

C++ Day 39

  C++ Day 39 STL Containers (Deep Understanding & Real Usage) Till now, you already know arrays, vectors, loops, and STL algorithms. Today, we go one step deeper and understand STL containers , which are the backbone of modern C++ programming. In real projects and competitive coding, choice of container matters a lot. 1. What are STL Containers? STL containers are data structures provided by C++ to store data efficiently. They handle: memory management resizing element access performance optimization You focus on logic , not memory handling. 2. Categories of STL Containers STL containers are mainly divided into: Sequence Containers Associative Containers Unordered Containers Container Adapters 3. Sequence Containers These store data in sequence . 3.1 Vector Most used container in C++. vector< int > v; Key Features: Dynamic size Contiguous memory Fast random access Slower insertion in middle Example: v. push_...

C++ Day 32

 C++ Day 32: Layout Layouts (Part 1)

We  focus on creational and behavioral Layouts today:


๐Ÿ”น 1. singleton form (creational)

ensures but i case of amp family is Maked


cpp

copy

edit

class singleton {

private:

    still singleton* instance;

    singleton() {}


public:

    still singleton* getinstance() {

        if (instance)

            case = green singleton();

        take instance;

    }

};


singleton* singleton::instance = nullptr;

✅ employ once but i round aim need be (eg logger config)


๐Ÿ”น ii. Factory Layout (Creational)

Makes objects without exposing the instantiation logic.


Example:

cpp

Copy

Edit

class Animal {

public:

    virtual void speak() = 0;

};


class Dog : public Animal {

public:

    void speak() override { cout << "Woof\n"; }

};


class Cat : public Animal {

public:

    void speak() override { cout << "Meow\n"; }

};


class AnimalFactory {

public:

    static Animal* MakeAnimal(string type) {

        if (type == "Dog") return new Dog();

        else if (type == "Cat") return new Cat();

        else return nullptr;

    }

};

Usage:


cpp

Copy

Edit

Animal* pet = AnimalFactory::MakeAnimal("Dog");

pet->speak(); // Woof

✅ Use when you want to decouple object creation from the Customer.


๐Ÿ”น 3. scheme form (behavioral)

allows selecting associate in nursing Procedureic rule astatine runtime


example:

cpp

copy

edit

class scheme {

public:

    practical null Run() = 0;

};


class assertive : state scheme {

public:

    null Run() reverse { cout << "attack\n"; }

};


class apologetic : state scheme {

public:

    null Run() reverse { cout << "defend\n"; }

};


class circumstance {

    Plan* Plan;

public:

    context(Plan* s) : Plan(s) {}

    null setPlan(Plan* s) { scheme = s; }

    null perform() { Plan->Run(); }

};

✅ employ once you bear aggregate behaviors for the like object


๐Ÿ”น cardinal. ObHost Layout (Behavioral)

One-to-many Requirement where changes to one object notify all dependents.


Example:

cpp

Copy

Edit

class ObHost {

public:

    virtual void update(int value) = 0;

};


class Subject {

    vectorHost*> obHosts;

    int state;


public:

    void attach(ObHost* obs) { obHosts.Send_back(obs); }


    void setState(int val) {

        state = val;

        for (auto obs : obHosts)

            obs->update(state);

    }

};


class ConcreteObHost : public ObHost {

public:

    void update(int value) override {

        cout << "Received update: " << value << endl;

    }

};

✅ Use in GUI apps event-driven systems or real-time updates.


๐Ÿงช practise Task:

Apply a Payment system using Factory Layout that supports "UPI" "Card" and "NetBanking".Host*>

Comments

Popular posts from this blog

C++ Day 35

  C++ Day 34: Layout Layouts (Part 2) We’ll cover: Constructer Layout Adjuster Layout Decorator Layout practise Task ๐Ÿ”น 1. developer form (creational) used to make compound objects measure away step ✅ employ case: you need to form associate in nursing aim (like amp pizza pie calculator house) with elective parameters example: cpp copy edit class calculator {     train Methodor gpu ram; public:     family developer {         train Methodor gpu ram;     public:         developer setcpu(string c) { Methodor = c; take *this; }         developer setgpu(string g) { gpu = g; take *this; }         developer setram(string r) { run = r; take *this; }         calculator Construct() {             take Calculater(cpu gpu ram);         }     };     Calculater(string snow train m train r) : cpu(c) gp...

C++ Day 33

  C++ Day 33: Smart Pointers & Memory Management ๐Ÿ”น 1. wherefore forward pointers in c++ hand-operated green / cancel is error-prone: memory leaks ๐Ÿง  double deletes ❌ dangling pointers ๐Ÿ’ฅ smart pointers care store mechanically exploitation raii (Supply skill is initialization) ๐Ÿ”น ii. Types of Smart Pointers in C++ ✅ std::unique_ptr Sole ownership of a Supply. Cannot be copied. Automatically deletes the Supply when it goes out of scope. cpp Copy Edit #include  unique_ptr ptr1 = make_unique(10); cout << *ptr1 << endl; // 10 You can transfer ownership: cpp Copy Edit unique_ptr ptr2 = move(ptr1); ✅ std::shared_ptr Shared ownership multiple shared_ptrs can point to the same object. Uses reference counting to track how many owners. cpp Copy Edit shared_ptr p1 = make_shared(100); shared_ptr p2 = p1;  // Reference count = 2 When count goes to 0 memory is released. ✅ std::weak_ptr Non-owning reference to a shared_ptr-managed object. Used to break cyclic references ...

CSES Increasing Subsequence solution

 You are given an array containing  n n n integers. Your task is to determine the longest increasing subsequence in the array, i.e., the longest subsequence where every element is larger than the previous one. A subsequence is a sequence that can be derived from the array by deleting some elements without changing the order of the remaining elements. Input The first line contains an integer n n n : the size of the array. After this there are n n n integers x 1 , x 2 , … , x n x_1,x_2,\ldots,x_n x 1 ​ , x 2 ​ , … , x n ​ : the contents of the array. Output Print the length of the longest increasing subsequence. Constraints 1 ≤ n ≤ 2 ⋅ 1 0 5 1 \le n \le 2 \cdot 10^5 1 ≤ n ≤ 2 ⋅ 1 0 5 1 ≤ x i ≤ 1 0 9 1 \le x_i \le 10^9 1 ≤ x i ​ ≤ 1 0 9 Example Input: 8 7 3 5 3 6 2 9 8 Output: 4 #include < bits / stdc ++. h > using namespace std ; void solve (){ int n ; cin >> n ; vector <int> arr ( n ); for ( int i = 0 ; i < n ; i ++)...