#include "vecteur.h"


Vecteur :: Vecteur (int value, int capacite)
    : _capacite(capacite), t(NULL)
{
    t = new int [_capacite];
    assert(t);
    for (int i = 0; i < _capacite; i++)
        t[i] = value;
}

Vecteur :: Vecteur (const Vecteur & x)
    : _capacite(x._capacite), t(NULL)
{
    cout << "CTOR Copie Vecteur" << endl;
    t = new int [_capacite];
    assert(t);
    for (int i = 0; i < x.getCapacite(); i++)
        t[i] = x[i];
}

Vecteur :: ~ Vecteur ()
{
    if ( t != NULL)
        delete [] t;
}

Vecteur & Vecteur :: operator= (const Vecteur & x)
{
    if ( this == &x )
    {
        cout << "Vecteurs identiques" << endl;
        return *this;
    }

    assert(_capacite == x._capacite);

    if ( t != NULL)
        delete [] t;
    t = new int [_capacite];
    assert(t);

    for (int i = 0; i < x._capacite; i++)
        t[i] = x[i];

    return *this;
}

int Vecteur :: operator[] (int rang) const
{
    assert (0<= rang && rang < _capacite);
    return t[rang];
}

int & Vecteur :: operator[] (int rang)
{
    assert (0 <= rang && rang < _capacite);
    return t[rang];
}

ostream & operator<< (ostream & os, const Vecteur & x)
{
    cout << "( ";
    for (int i = 0; i < x._capacite; i++)
        os << x[i] << ' ';
    os << ")";
    return os;
}

istream & operator>> (istream & is, Vecteur & x)
{
    cout << "rentrez les " << x.getCapacite() << " valeurs" << endl;
    for (int i = 0; i < x.getCapacite(); i++)
        is >> x[i];
    return is;
}

double produit_scalaire (const Vecteur  & x, const Vecteur  & y)
{
    assert(x.getCapacite() == y.getCapacite());
    double sum = 0;
    for (int i = 0; i < x.getCapacite(); i++)
        sum += x[i] * y[i];
    return sum;
}

