// Error: insert deja de correr elementos un paso antes. El invariante lo descubre.
#include <cassert>
#include <cstddef>
#include <iostream>
#include <vector>

class SortedInts {
public:
    void insert(int value) {
        items_.push_back(value);
        std::size_t i = items_.size() - 1;
        while (i > 1 && items_[i - 1] > value) {
            items_[i] = items_[i - 1];
            i--;
        }
        items_[i] = value;
    }

    std::size_t size() const {
        return items_.size();
    }

    void check_invariants() const {
        for (std::size_t i = 1; i < items_.size(); i++) {
            assert(items_[i - 1] <= items_[i]);
        }
    }

private:
    std::vector<int> items_;
};

int main() {
    SortedInts sorted;
    sorted.insert(5);
    sorted.check_invariants();
    sorted.insert(3);
    sorted.check_invariants();
    std::cout << "tamaño " << sorted.size() << "\n";
    return 0;
}
