/*
 * htwg_vector.h
 *
 * Stark vereinfachte Vektor-Klasse.
 *
 * Autor: H.Drachenfels
 * Erstellt am: 31.5.2024
 */
#ifndef HTWG_VECTOR_H
#define HTWG_VECTOR_H

#include <cstddef> // size_t

namespace htwg
{
    template<typename T> class  vector final
    {
    private:
        std::size_t n;
        T *v;
    public:
        explicit vector(std::size_t n)
        : n(n), v(new T[n]) // Arrayelemente uninitialisiert
        { }

        ~vector()
        {
            delete[] this->v;
        }

        // Copy/Move-Semantik unterbinden:
        vector(const vector& v) = delete;
        vector& operator=(const vector& v) = delete;
        vector(vector&& v) = delete;
        vector& operator=(vector&& v) = delete;

        std::size_t size() const
        {
            return this->n;
        }

        T& operator[](std::size_t i)
        {
            // Verbesserungsvorschlag: Index pruefen
            return this->v[i];
        }

        const T& operator[](std::size_t i) const
        {
            // Verbesserungsvorschlag: Index pruefen
            return this->v[i];
        }
    };
}

#endif

