From f978d9909af2a937708ff7788dccef3e5ef301d8 Mon Sep 17 00:00:00 2001 From: kinou-p Date: Tue, 22 Nov 2022 11:49:14 +0100 Subject: [PATCH] vector pretty good --- .../iterators/random_access_iterator.hpp | 6 +- containers/iterators/reverse_iterator.hpp | 126 +++++++++--------- containers/vector.hpp | 10 +- 3 files changed, 74 insertions(+), 68 deletions(-) diff --git a/containers/iterators/random_access_iterator.hpp b/containers/iterators/random_access_iterator.hpp index 4e6e42a..f83e475 100644 --- a/containers/iterators/random_access_iterator.hpp +++ b/containers/iterators/random_access_iterator.hpp @@ -6,7 +6,7 @@ /* 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 ++() { + //std::cout << "operandom ++\n"; _ptr++; return (*this); } random_access_iterator operator ++(int) { + //std::cout << "operandom 1 ++\n"; random_access_iterator tmp(*this); ++(*this); return (tmp); @@ -93,12 +95,14 @@ namespace ft random_access_iterator &operator --() { + //std::cout << "operandom --\n"; _ptr--; return (*this); } random_access_iterator operator --(int) { + //std::cout << "operandom 1 --\n"; random_access_iterator tmp(*this); --(*this); return (tmp); diff --git a/containers/iterators/reverse_iterator.hpp b/containers/iterators/reverse_iterator.hpp index 1888edb..8880ed6 100644 --- a/containers/iterators/reverse_iterator.hpp +++ b/containers/iterators/reverse_iterator.hpp @@ -6,7 +6,7 @@ /* 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() {} - explicit reverse_iterator (iterator_type it) { _Ite = iterator_type(it); } - - //reverse_iterator(const reverse_iterator &rev_it) : _Ite(rev_it.base()) {} + explicit reverse_iterator (iterator_type it) { _Ite = it; } template reverse_iterator(const reverse_iterator &rev_it) { - *this = rev_it; + _Ite = rev_it.base(); } - + virtual ~reverse_iterator(){} - // reverse_iterator(const reverse_iterator &rev_it) - // { - // _Ite = It(rev_it.base()); - // } - // operator reverse_iterator() const - // { - // return (reverse_iterator< Iter const>(_Ite)); - // } - + template reverse_iterator operator=(reverse_iterator const &cpy) { _Ite = cpy.base(); 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-------------- @@ -86,49 +63,82 @@ namespace ft reverse_iterator& operator++() { + //std::cout << "ope0 ++\n"; --_Ite; return (*this); } reverse_iterator operator++(int) { - reverse_iterator tmp = *this; - --_Ite; + //std::cout << "ope ++\n"; + reverse_iterator tmp = *this; + _Ite--; return (tmp); } reverse_iterator& operator--() { + //std::cout << "ope0 --\n"; ++_Ite; return (*this); } reverse_iterator operator--(int) { - reverse_iterator tmp = *this; - ++_Ite; + //std::cout << "ope --\n"; + reverse_iterator tmp = *this; + _Ite++; return (tmp); } + // reverse_iterator& operator++() { + // --_Ite; + // return (*this); + // } + + // reverse_iterator operator++(int) { + // reverse_iterator tmp = *this; + // _Ite--; + // return (tmp); + // } + + // reverse_iterator& operator--() { + // ++_Ite; + // return (*this); + // } + + // reverse_iterator operator--(int) { + // reverse_iterator tmp = *this; + // _Ite++; + // return (tmp); + // } + //--------------------------------------- //----------------ADRESS----------------- //--------------------------------------- - reference operator *() { return (*_Ite); } - const reference operator *() const { return (*_Ite); } + reference operator *() + { + iterator_type tmp(_Ite); + tmp--; + return (*tmp); + } + + const reference operator *() const + { + iterator_type tmp(_Ite); + tmp--; + return (*tmp); + } + pointer operator ->() { 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---------------- //--------------------------------------- - // reverse_iterator operator+ (difference_type n) const { return reverse_iterator(_Ite - n); } - // reverse_iterator& operator+= (difference_type n) { return reverse_iterator(_Ite -= n); } - // reverse_iterator operator- (difference_type n) const { return reverse_iterator(_Ite + n); } - // reverse_iterator& operator-= (difference_type n) { 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 @@ -141,52 +151,44 @@ namespace ft 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) { - //std::cout << "its me\n"; _Ite += n; return (*this); } - - // template - // reverse_iterator operator+ (typename reverse_iterator::difference_type n, const reverse_iterator& rev_it) - // { - - // } - - // template - // typename reverse_iterator::difference_type operator- ( const reverse_iterator& lhs, const reverse_iterator& rhs) - // { - - // } - //--------------------------------- //--------------GET---------------- //--------------------------------- - iterator_type base() const { return _Ite; } + iterator_type base() const { return /*iterator_type*/(_Ite); } }; template - bool operator== (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() == rhs.base()); } + bool operator== (const reverse_iterator &lhs, const reverse_iterator &rhs) + { return (lhs.base() == rhs.base()); } template - bool operator!= (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() != rhs.base()); } + bool operator!= (const reverse_iterator &lhs, const reverse_iterator &rhs) + { return (lhs.base() != rhs.base()); } template - bool operator< (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() > rhs.base()); } + bool operator< (const reverse_iterator &lhs, const reverse_iterator &rhs) + { return (lhs.base() > rhs.base()); } template - bool operator<= (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() >= rhs.base()); } + bool operator<= (const reverse_iterator &lhs, const reverse_iterator &rhs) + { return (lhs.base() >= rhs.base()); } template - bool operator> (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() < rhs.base()); } + bool operator> (const reverse_iterator &lhs, const reverse_iterator &rhs) + { return (lhs.base() < rhs.base()); } template - bool operator>= (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() <= rhs.base()); } + bool operator>= (const reverse_iterator &lhs, const reverse_iterator &rhs) + { return (lhs.base() <= rhs.base()); } } \ No newline at end of file diff --git a/containers/vector.hpp b/containers/vector.hpp index 7c439e6..68c224e 100644 --- a/containers/vector.hpp +++ b/containers/vector.hpp @@ -6,7 +6,7 @@ /* 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() { - return reverse_iterator(_tab); + return reverse_iterator(this->end()); } const_reverse_iterator rbegin() const { - return const_reverse_iterator(_tab); + return const_reverse_iterator(this->end()); } reverse_iterator rend() { - return reverse_iterator(_tab + _size); + return reverse_iterator(this->begin()); } const_reverse_iterator rend() const { - return const_reverse_iterator(_tab + _size); + return const_reverse_iterator(this->begin()); } //------------------------