#include // Array.cpp #include "Array.h" // ............................................. Array anArray; // .................................. Array anArray(capacity); template Array::Array(int capacity) : _size(0), _capacity(capacity), _t(new T[capacity]) { // for(int i = 0; i<_capacity; i++) _t[i] = T(); } // .......................................... Array anArray(a); template Array::Array(const Array& a) { _copy(a); } // ................................................... anArray = a; template Array& Array::operator=(const Array& a) { if(this != &a) { _destroy(); _copy(a); } return *this; } // .......................... Array anArray(CArray,capacity); template Array::Array(const T* CArray, int capacity) : _size(0), _capacity(capacity), _t(new T[capacity]) { for(int i = 0; i < capacity; i++) { insert(CArray[i]); } } template Array::~Array(void) { _destroy(); } // ..................................... T* CArray = (T*)anArray; template Array::operator T*(void) { return _t; } // ................................................ anArray.size(); template int Array::size(void) const { return _size; } // ........................................... anArray.capacity(); template int Array::capacity(void) const { return _capacity; } // .............................................. anArray.empty(); template bool Array::empty(void) const { return _size == 0; } // ................................................ anArray.full(); template bool Array::full(void) const { return _size == _capacity; } // ......................................... anArray.has(element); template int Array::has(const T& element) const // retourne l’index ou -1 { for(int i = 0; i <_size; i++) { if (_t[i] == element) return i; } return -1; } // ...................... anArray[index] pour un Array non constant template T& Array::operator[](int index) { assert(index >= 0 && index <_size); return _t[index]; } // ...................... anArray[index]; pour un Array constant !! template const T& Array::operator[](int index) const { assert(index >= 0 && index <_size); return _t[index]; } // .................................................. anArray == a; template bool Array::operator==(const Array& a) const { if(_size != a._size) return false; if(_capacity != a._capacity) return false; for(int i = 0; i <_size; i++) { if (_t[i] != a._t[i]) return false; } return true; } // .................................................. anArray != a; template bool Array::operator!=(const Array& a) const { return !operator==(a); } // .................................................. anArray += a; template Array& Array::operator+=(const Array& a) { for(int i = 0; i < a._size ; i++) { insert(a._t[i]); } return *this; } // ........................................................ a1 + a2; template Array operator+(const Array& a1, const Array& a2) { Array anArray(a1); return anArray += a2; } // ........................................... anArray << element; template Array& Array::operator<<(const T& element) { insert(element); return *this; } // ........................................... anArray >> element; template Array& Array::operator>>(T& element) { element = remove(); return *this; } // .................................................. anArray(t,f); template T Array::operator()(const T& t, T (*f)(const T&,const T&)) const { T result = t; for(int i = 0; i <_size; i++) { result = f(result,_t[i]); } return result; } // ....................................... anArray.insert(element); template void Array::insert(const T& element) { if (full()) { _realloc(2*_capacity); } _t[_size++] = element; } // .............................................. anArray.remove(); template T Array::remove(void) { assert(!empty()); return _t[--_size]; } // ......................................................... s << a; template ostream& operator<<(ostream& s, const Array& a) { s << '('; if (!a.empty()) { for(int i = 0; i < a._size - 1; i++) { s << a._t[i] << ','; } s << a._t[a._size - 1]; } return s << ')'; } // ...................................................... _copy(a); template void Array::_copy(const Array& a) { _size = a._size; _capacity = a._capacity; _t = new T[_capacity]; for(int i = 0; i void Array::_destroy(void) { if (_t) delete [] _t; _size = 0; _capacity = 0; _t = NULL; } // ....................................... _realloc(newCapacity); template void Array::_realloc(int newCapacity) { if (_capacity == newCapacity) return; T* newt = new T[newCapacity]; int limit = _size < newCapacity ? _size : newCapacity; for(int i = 0; i < limit; i++) { newt[i] = _t[i]; } _destroy(); _size = limit; _capacity = newCapacity; _t = newt; }