vector pretty good

This commit is contained in:
kinou-p 2022-11-22 11:49:14 +01:00
parent f4c6e7db4b
commit f978d9909a
3 changed files with 74 additions and 68 deletions

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/30 16:14:35 by apommier #+# #+# */ /* Created: 2022/10/30 16:14:35 by apommier #+# #+# */
/* Updated: 2022/11/22 08:10:53 by apommier ### ########.fr */ /* Updated: 2022/11/22 10:55:39 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -80,12 +80,14 @@ namespace ft
random_access_iterator &operator ++() random_access_iterator &operator ++()
{ {
//std::cout << "operandom ++\n";
_ptr++; _ptr++;
return (*this); return (*this);
} }
random_access_iterator operator ++(int) random_access_iterator operator ++(int)
{ {
//std::cout << "operandom 1 ++\n";
random_access_iterator tmp(*this); random_access_iterator tmp(*this);
++(*this); ++(*this);
return (tmp); return (tmp);
@ -93,12 +95,14 @@ namespace ft
random_access_iterator &operator --() random_access_iterator &operator --()
{ {
//std::cout << "operandom --\n";
_ptr--; _ptr--;
return (*this); return (*this);
} }
random_access_iterator operator --(int) random_access_iterator operator --(int)
{ {
//std::cout << "operandom 1 --\n";
random_access_iterator tmp(*this); random_access_iterator tmp(*this);
--(*this); --(*this);
return (tmp); return (tmp);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/11/19 05:14:31 by apommier #+# #+# */ /* Created: 2022/11/19 05:14:31 by apommier #+# #+# */
/* Updated: 2022/11/22 08:23:53 by apommier ### ########.fr */ /* Updated: 2022/11/22 11:41:22 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -40,45 +40,22 @@ namespace ft
//--------------------------------------- //---------------------------------------
reverse_iterator() : _Ite() {} reverse_iterator() : _Ite() {}
explicit reverse_iterator (iterator_type it) { _Ite = iterator_type(it); } explicit reverse_iterator (iterator_type it) { _Ite = it; }
//reverse_iterator(const reverse_iterator<It> &rev_it) : _Ite(rev_it.base()) {}
template<typename It> template<typename It>
reverse_iterator(const reverse_iterator<It> &rev_it) reverse_iterator(const reverse_iterator<It> &rev_it)
{ {
*this = rev_it; _Ite = rev_it.base();
} }
virtual ~reverse_iterator(){} virtual ~reverse_iterator(){}
// reverse_iterator(const reverse_iterator<It> &rev_it)
// {
// _Ite = It(rev_it.base());
// }
// operator reverse_iterator<Iter>() const
// {
// return (reverse_iterator< Iter const>(_Ite));
// }
template<typename It> template<typename It>
reverse_iterator operator=(reverse_iterator<It> const &cpy) reverse_iterator operator=(reverse_iterator<It> const &cpy)
{ {
_Ite = cpy.base(); _Ite = cpy.base();
return (*this); return (*this);
} }
//---------------------------------------
//-------------COMPARAISON---------------
//---------------------------------------
// bool operator== (reverse_iterator const &rhs) const { return (_Ite == rhs.base()); }
// bool operator!= (reverse_iterator const &rhs) const { return (_Ite != rhs.base()); }
// bool operator< (reverse_iterator const &rhs) const { return (_Ite > rhs.base()); }
// bool operator<= (reverse_iterator const &rhs) const { return (_Ite >= rhs.base()); }
// bool operator> (reverse_iterator const &rhs) const { return (_Ite < rhs.base()); }
// bool operator>= (reverse_iterator const &rhs) const { return (_Ite <= rhs.base()); }
//--------------------------------------- //---------------------------------------
//-------------INCREMENTERS-------------- //-------------INCREMENTERS--------------
@ -86,49 +63,82 @@ namespace ft
reverse_iterator& operator++() reverse_iterator& operator++()
{ {
//std::cout << "ope0 ++\n";
--_Ite; --_Ite;
return (*this); return (*this);
} }
reverse_iterator operator++(int) reverse_iterator operator++(int)
{ {
reverse_iterator tmp = *this; //std::cout << "ope ++\n";
--_Ite; reverse_iterator<Iter> tmp = *this;
_Ite--;
return (tmp); return (tmp);
} }
reverse_iterator& operator--() reverse_iterator& operator--()
{ {
//std::cout << "ope0 --\n";
++_Ite; ++_Ite;
return (*this); return (*this);
} }
reverse_iterator operator--(int) reverse_iterator operator--(int)
{ {
reverse_iterator tmp = *this; //std::cout << "ope --\n";
++_Ite; reverse_iterator<Iter> tmp = *this;
_Ite++;
return (tmp); return (tmp);
} }
// reverse_iterator& operator++() {
// --_Ite;
// return (*this);
// }
// reverse_iterator operator++(int) {
// reverse_iterator<Iter> tmp = *this;
// _Ite--;
// return (tmp);
// }
// reverse_iterator& operator--() {
// ++_Ite;
// return (*this);
// }
// reverse_iterator operator--(int) {
// reverse_iterator<Iter> tmp = *this;
// _Ite++;
// return (tmp);
// }
//--------------------------------------- //---------------------------------------
//----------------ADRESS----------------- //----------------ADRESS-----------------
//--------------------------------------- //---------------------------------------
reference operator *() { return (*_Ite); } reference operator *()
const reference operator *() const { return (*_Ite); } {
iterator_type tmp(_Ite);
tmp--;
return (*tmp);
}
const reference operator *() const
{
iterator_type tmp(_Ite);
tmp--;
return (*tmp);
}
pointer operator ->() { return (_Ite.getPointer()); } pointer operator ->() { return (_Ite.getPointer()); }
const pointer operator ->() const { return (_Ite.getPointer()); } const pointer operator ->() const { return (_Ite.getPointer()); }
reference operator [](difference_type nbr) const { return (*(_Ite + nbr)); } reference operator [](difference_type nbr) const { return (*(_Ite - nbr - 1)); }
//--------------------------------------- //---------------------------------------
//--------------OPERATION---------------- //--------------OPERATION----------------
//--------------------------------------- //---------------------------------------
// reverse_iterator operator+ (difference_type n) const { return reverse_iterator<iterator_type>(_Ite - n); }
// reverse_iterator& operator+= (difference_type n) { return reverse_iterator<iterator_type>(_Ite -= n); }
// reverse_iterator operator- (difference_type n) const { return reverse_iterator<iterator_type>(_Ite + n); }
// reverse_iterator& operator-= (difference_type n) { return reverse_iterator<iterator_type>(_Ite += n); }
reverse_iterator operator+ (difference_type n) const { return reverse_iterator(_Ite - n); } reverse_iterator operator+ (difference_type n) const { return reverse_iterator(_Ite - n); }
friend reverse_iterator operator +(difference_type lhs, reverse_iterator const& rhs) { return (rhs + lhs); } // n + a friend reverse_iterator operator +(difference_type lhs, reverse_iterator const& rhs) { return (rhs + lhs); } // n + a
@ -141,52 +151,44 @@ namespace ft
reverse_iterator operator- (difference_type n) const { return reverse_iterator(_Ite + n); } reverse_iterator operator- (difference_type n) const { return reverse_iterator(_Ite + n); }
difference_type operator- (reverse_iterator const &lhs) const { return (_Ite - lhs._Ite); } difference_type operator- (reverse_iterator const &lhs) const { return (lhs._Ite - _Ite); }
reverse_iterator& operator-= (difference_type n) reverse_iterator& operator-= (difference_type n)
{ {
//std::cout << "its me\n";
_Ite += n; _Ite += n;
return (*this); return (*this);
} }
// template <class Iterator>
// reverse_iterator<Iterator> operator+ (typename reverse_iterator<Iterator>::difference_type n, const reverse_iterator<Iterator>& rev_it)
// {
// }
// template <class Iterator>
// typename reverse_iterator<Iterator>::difference_type operator- ( const reverse_iterator<Iterator>& lhs, const reverse_iterator<Iterator>& rhs)
// {
// }
//--------------------------------- //---------------------------------
//--------------GET---------------- //--------------GET----------------
//--------------------------------- //---------------------------------
iterator_type base() const { return _Ite; } iterator_type base() const { return /*iterator_type*/(_Ite); }
}; };
template<class Ite1, class Ite2> template<class Ite1, class Ite2>
bool operator== (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs) { return (lhs.base() == rhs.base()); } bool operator== (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs)
{ return (lhs.base() == rhs.base()); }
template<class Ite1, class Ite2> template<class Ite1, class Ite2>
bool operator!= (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs) { return (lhs.base() != rhs.base()); } bool operator!= (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs)
{ return (lhs.base() != rhs.base()); }
template<class Ite1, class Ite2> template<class Ite1, class Ite2>
bool operator< (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs) { return (lhs.base() > rhs.base()); } bool operator< (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs)
{ return (lhs.base() > rhs.base()); }
template<class Ite1, class Ite2> template<class Ite1, class Ite2>
bool operator<= (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs) { return (lhs.base() >= rhs.base()); } bool operator<= (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs)
{ return (lhs.base() >= rhs.base()); }
template<class Ite1, class Ite2> template<class Ite1, class Ite2>
bool operator> (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs) { return (lhs.base() < rhs.base()); } bool operator> (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs)
{ return (lhs.base() < rhs.base()); }
template<class Ite1, class Ite2> template<class Ite1, class Ite2>
bool operator>= (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs) { return (lhs.base() <= rhs.base()); } bool operator>= (const reverse_iterator<Ite1> &lhs, const reverse_iterator<Ite2> &rhs)
{ return (lhs.base() <= rhs.base()); }
} }

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/12 19:46:32 by apommier #+# #+# */ /* Created: 2022/10/12 19:46:32 by apommier #+# #+# */
/* Updated: 2022/11/22 07:46:32 by apommier ### ########.fr */ /* Updated: 2022/11/22 11:24:31 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -141,22 +141,22 @@ class vector
reverse_iterator rbegin() reverse_iterator rbegin()
{ {
return reverse_iterator(_tab); return reverse_iterator(this->end());
} }
const_reverse_iterator rbegin() const const_reverse_iterator rbegin() const
{ {
return const_reverse_iterator(_tab); return const_reverse_iterator(this->end());
} }
reverse_iterator rend() reverse_iterator rend()
{ {
return reverse_iterator(_tab + _size); return reverse_iterator(this->begin());
} }
const_reverse_iterator rend() const const_reverse_iterator rend() const
{ {
return const_reverse_iterator(_tab + _size); return const_reverse_iterator(this->begin());
} }
//------------------------ //------------------------