From 0cb13009c47149ece8778a0e2f519661fd251302 Mon Sep 17 00:00:00 2001 From: kinou-p Date: Wed, 2 Nov 2022 01:30:08 +0100 Subject: [PATCH] iterator? --- containers/iterators/enable_if.hpp | 0 containers/iterators/equal.hpp | 0 containers/iterators/is_integral.hpp | 0 containers/iterators/iterator.hpp | 28 +++++ containers/iterators/iterator_traits.hpp | 0 containers/iterators/make_pair.hpp | 0 containers/iterators/pair.hpp | 0 .../iterators/random_access_iterator.hpp | 77 ++++++++++++ containers/iterators/reverse_iterator.hpp | 0 containers/iterators/vector_iterators.hpp | 43 +++++++ containers/vector.hpp | 110 ++++++++++++------ ft_containers.hpp | 4 +- tests/main.cpp | 10 +- tests/stack_test.o | Bin 0 -> 1480 bytes 14 files changed, 236 insertions(+), 36 deletions(-) create mode 100644 containers/iterators/enable_if.hpp create mode 100644 containers/iterators/equal.hpp create mode 100644 containers/iterators/is_integral.hpp create mode 100644 containers/iterators/iterator.hpp create mode 100644 containers/iterators/iterator_traits.hpp create mode 100644 containers/iterators/make_pair.hpp create mode 100644 containers/iterators/pair.hpp create mode 100644 containers/iterators/random_access_iterator.hpp create mode 100644 containers/iterators/reverse_iterator.hpp create mode 100644 containers/iterators/vector_iterators.hpp create mode 100644 tests/stack_test.o diff --git a/containers/iterators/enable_if.hpp b/containers/iterators/enable_if.hpp new file mode 100644 index 0000000..e69de29 diff --git a/containers/iterators/equal.hpp b/containers/iterators/equal.hpp new file mode 100644 index 0000000..e69de29 diff --git a/containers/iterators/is_integral.hpp b/containers/iterators/is_integral.hpp new file mode 100644 index 0000000..e69de29 diff --git a/containers/iterators/iterator.hpp b/containers/iterators/iterator.hpp new file mode 100644 index 0000000..9c1ab06 --- /dev/null +++ b/containers/iterators/iterator.hpp @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* iterator.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/10/29 16:59:53 by apommier #+# #+# */ +/* Updated: 2022/10/29 17:04:13 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef ITERATOR_HPP +# define ITERATOR_HPP + +template class iterator_traits;template class iterator_traits;template class iterator_traits + +template +class iterator +{ + typedef T value_type; + typedef Distance difference_type; + typedef Pointer pointer; + typedef Reference reference; + typedef Category iterator_category; +}; + +#endif \ No newline at end of file diff --git a/containers/iterators/iterator_traits.hpp b/containers/iterators/iterator_traits.hpp new file mode 100644 index 0000000..e69de29 diff --git a/containers/iterators/make_pair.hpp b/containers/iterators/make_pair.hpp new file mode 100644 index 0000000..e69de29 diff --git a/containers/iterators/pair.hpp b/containers/iterators/pair.hpp new file mode 100644 index 0000000..e69de29 diff --git a/containers/iterators/random_access_iterator.hpp b/containers/iterators/random_access_iterator.hpp new file mode 100644 index 0000000..e906236 --- /dev/null +++ b/containers/iterators/random_access_iterator.hpp @@ -0,0 +1,77 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* random_access_iterator.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/10/30 16:14:35 by apommier #+# #+# */ +/* Updated: 2022/10/30 16:36:23 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef RANDOM_ACCESS_ITERATOR_HPP +# define RANDOM_ACCESS_ITERATOR_HPP + +namespace ft +{ + template + class random_access_iterator + { + public: + + //--------------------------------------- + //--------CONSTRUCTOR DESTRUCTOR--------- + //--------------------------------------- + random_access_iterator() + { + + } + + random_access_iterator() + { + + } + + random_access_iterator(random_access_iterator &cpy) + { + + } + + ~random_access_iterator() + { + + } + + vectorIterator &operator=() + { + + } + + //--------------------------------------- + //-------------COMPARAISON--------------- + //--------------------------------------- + bool operator ==() {} + bool operator !=() {} + bool operator <() {} + bool operator >() {} + bool operator <=() {} + bool operator >=() {} + + //--------------------------------------- + //-------------INCREMENTERS-------------- + //--------------------------------------- + + random_access_iterator operator ++() {} + random_access_iterator operator ++(int) {} + random_access_iterator operator --() {} + random_access_iterator operator --(int) {} + + //--------------------------------------- + //-------------INCREMENTERS-------------- + //--------------------------------------- + + private: + }; +} +#endif \ No newline at end of file diff --git a/containers/iterators/reverse_iterator.hpp b/containers/iterators/reverse_iterator.hpp new file mode 100644 index 0000000..e69de29 diff --git a/containers/iterators/vector_iterators.hpp b/containers/iterators/vector_iterators.hpp new file mode 100644 index 0000000..ff06dac --- /dev/null +++ b/containers/iterators/vector_iterators.hpp @@ -0,0 +1,43 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* vector_iterators.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/10/30 16:03:53 by apommier #+# #+# */ +/* Updated: 2022/10/30 16:12:03 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef VECTOR_ITERATORS_HPP +# define VECTOR_ITERATORS_HPP + +namespace ft +{ +template +class random_access_iterator +{ + public : + + random_access_iterator() + { + + } + + random_access_iterator(random_access_iterator cpy) + { + + } + + ~random_access_iterator() + { + + } + + + private : +}; +} + +#endif \ No newline at end of file diff --git a/containers/vector.hpp b/containers/vector.hpp index 9b78db0..9a71496 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/10/26 19:39:20 by apommier ### ########.fr */ +/* Updated: 2022/10/28 17:58:43 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,10 +27,10 @@ class vector typedef Allocator allocator_type; typedef value_type& reference; typedef const value_type& const_reference; - typedef typename Allocator::pointer pointer; - typedef typename Allocator::const_pointer const_pointer; - typedef value_type iterator; - typedef value_type const_iterator; + typedef typename Allocator::pointer pointer; + typedef typename Allocator::const_pointer const_pointer; + typedef value_type* iterator; + typedef value_type* const_iterator; typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; typedef std::ptrdiff_t difference_type; @@ -39,24 +39,33 @@ class vector //--------------------------------------- //---------COPLIEN FORM FUNCTION--------- //--------------------------------------- - explicit vector (const allocator_type& alloc = allocator_type()) : _allocator(alloc) //default constructor + explicit vector (const allocator_type& alloc = allocator_type()) : _alloc(alloc) //default constructor { - _tab = 0 - _size = 0 - _capacity = 0 + _tab = 0; + _size = 0; + _capacity = 0; _start = 0; _end = 0; - _end_capacity = 0; + _alloc = alloc; + //_end_capacity = 0; } - explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type()): _allocator(alloc) //fill constructor + explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type()): _alloc(alloc) //fill constructor { - _tab = 0 - _size = 0 - _capacity = 0 + _tab = 0; + _size = 0; + _capacity = 0; _start = 0; _end = 0; - _end_capacity = 0; + //_end_capacity = 0; + + _alloc = alloc; + _start = _alloc.allocate(n); + _end = _start + n; + _size = n; + _capacity = n; + while (n--) + alloc.construct(val, _end - n); } template @@ -94,7 +103,7 @@ class vector iterator end() { - return (_begin); + return (_end); } reverse_iterator rbegin() @@ -117,7 +126,7 @@ class vector size_type max_size() const { - return (_allocator.max_size()); + return (_alloc.max_size()); } void resize (size_type n, value_type val = value_type()) //Resizes the container so that it contains n elements. @@ -129,7 +138,7 @@ class vector while (n > this->size()) { _end--; - _allocator.destroy(_end); + _alloc.destroy(_end); } } //else // n > size @@ -138,12 +147,12 @@ class vector size_type capacity() const { - return (_end_capacity - _start); + return (_capacity); } bool empty() const { - if (!_end - _start) + if (_end == _start) return (1); return(0); } @@ -200,12 +209,12 @@ class vector value_type* data() { - return (_tab); + return (_start); } const value_type* data() const { - return (_tab); + return (_start); } //------------------------- @@ -219,23 +228,48 @@ class vector void assign (size_type n, const value_type& val) //fill { - + + this->clear(); + if (n > this->max_size()) + throw (std::length_error("vector::resize")); + else if (n < this->size()) + { + while (n > this->size()) + { + _end--; + _alloc.destroy(_end); + } + } + //else // n > size + //insert() } void push_back (const value_type& val) { - + if (!this->max_size() - _size) + ; + //throw or alloc + else + { + _alloc.construct(val, end); + _size++; + _end++; + } } void pop_back() { - _allocator.destroy(_end - 1); + //if (!_size) + // ; + //throw std::; + _alloc.destroy(_end - 1); _end--; + _size--; } iterator insert (iterator position, const value_type& val) //single element { - + } void insert (iterator position, size_type n, const value_type& val) //fill @@ -249,27 +283,35 @@ class vector } - iterator erase (iterator position);iterator erase (iterator first, iterator last) + iterator erase (iterator position) { + + } + iterator erase (iterator first, iterator last) + { + } void swap (vector& x) { - + } void clear() { - + int i = 0; + + while (_start != _end) + this->pop_back(); } //------------------------- //--------Allocator-------- //------------------------- - allocator_type get_allocator() const + allocator_type get_alloc() const { - return (_allocator); + return (_alloc); } //--------------------------------------------- @@ -317,12 +359,12 @@ class vector value_type *_tab; size_type _size; - //size_type _capacity; + size_type _capacity; - allocator_type _allocator; + allocator_type _alloc; pointer _end; pointer _start; - pointer _end_capacity; + //pointer _end_capacity; }; } diff --git a/ft_containers.hpp b/ft_containers.hpp index d9b08c7..3679c04 100644 --- a/ft_containers.hpp +++ b/ft_containers.hpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/12 19:46:33 by apommier #+# #+# */ -/* Updated: 2022/10/19 17:22:39 by apommier ### ########.fr */ +/* Updated: 2022/10/28 17:39:13 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,4 +22,6 @@ # include "./containers/vector.hpp" //} +# include + #endif \ No newline at end of file diff --git a/tests/main.cpp b/tests/main.cpp index 67131db..dadb6f0 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/19 14:04:37 by apommier #+# #+# */ -/* Updated: 2022/10/19 14:38:42 by apommier ### ########.fr */ +/* Updated: 2022/10/28 17:12:41 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,6 +23,14 @@ void stack_tester() void vector_tester() { + ft::vector first; + std::cout << "------empty------\n"; + std::cout << first.empty() << std::endl; + std::cout << "------size------\n"; + std::cout << first.size() << std::endl; + std::cout << "------pushback then size------\n"; + first.push_back(5); + std::cout << first.size() << std::endl; } int main() diff --git a/tests/stack_test.o b/tests/stack_test.o new file mode 100644 index 0000000000000000000000000000000000000000..1aacd53b6812233b686a7cdb9ee18a8ba8687f68 GIT binary patch literal 1480 zcmbVM&2AGh5T0}k<);U@RqACq0V?(;RaB)&K`TX24i&dbJs?FJ$H}gmwWGCHG#7X^ zjvROxcmf!2Y{hjp2pGwlnQ!K^$K%=k^7iuGUZ(?2I`9TIo_1w%KhSU$WRoRPDBOy)6BdOBncfy^?s5-hKzkhLPU z_*94~(b;6dRZM0|XY7V7E2%ltvO*#z;s!Rr7MaRjxR3$^Z07l(xzZ|Wb{QL+vgHzz zT$Vh!De%Okf11qnm`S0t0;^R37o*YZ_{G(v7P?;FhxF>k>wP}$(r%yjUaoQ2#~wVv zbq^Qz0I)q@4Hn`0lbGJ_!_QxBIZ1z*lfKrUGTMEV;l`fipm{%Qyo# z6V{)Ln&NaUd8Jp|<@_shj0E#G;my(=8-?GJvt4A$MGG*)W;?*Z=kPLD9&#y_+PraoUB&*@7HI@`}1w1F+T9}zQC9DXT|A7jjy zaI(!YA=l(z+w*@|@*~t{IsTEwAEFN5&V=6EP0hc;m+)FoG1$hxwtVT6(GK~)0bs0* A$p8QV literal 0 HcmV?d00001