iterator?

This commit is contained in:
kinou-p 2022-11-02 01:30:08 +01:00
parent 4a42ab9be1
commit 0cb13009c4
14 changed files with 236 additions and 36 deletions

View File

View File

View File

View File

@ -0,0 +1,28 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* iterator.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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> class iterator_traits;template <class T> class iterator_traits<T*>;template <class T> class iterator_traits<const T*>
template <class Category, class T, class Distance = ptrdiff_t, class Pointer = T*, class Reference = T&>
class iterator
{
typedef T value_type;
typedef Distance difference_type;
typedef Pointer pointer;
typedef Reference reference;
typedef Category iterator_category;
};
#endif

View File

View File

View File

View File

@ -0,0 +1,77 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* random_access_iterator.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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<typename T>
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

View File

@ -0,0 +1,43 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* vector_iterators.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <typename T>
class random_access_iterator
{
public :
random_access_iterator()
{
}
random_access_iterator(random_access_iterator cpy)
{
}
~random_access_iterator()
{
}
private :
};
}
#endif

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/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 Allocator allocator_type;
typedef value_type& reference; typedef value_type& reference;
typedef const value_type& const_reference; typedef const value_type& const_reference;
typedef typename Allocator::pointer pointer; typedef typename Allocator::pointer pointer;
typedef typename Allocator::const_pointer const_pointer; typedef typename Allocator::const_pointer const_pointer;
typedef value_type iterator; typedef value_type* iterator;
typedef value_type const_iterator; typedef value_type* const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator; typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator; typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
typedef std::ptrdiff_t difference_type; typedef std::ptrdiff_t difference_type;
@ -39,24 +39,33 @@ class vector
//--------------------------------------- //---------------------------------------
//---------COPLIEN FORM FUNCTION--------- //---------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 _tab = 0;
_size = 0 _size = 0;
_capacity = 0 _capacity = 0;
_start = 0; _start = 0;
_end = 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 _tab = 0;
_size = 0 _size = 0;
_capacity = 0 _capacity = 0;
_start = 0; _start = 0;
_end = 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 <class InputIterator> template <class InputIterator>
@ -94,7 +103,7 @@ class vector
iterator end() iterator end()
{ {
return (_begin); return (_end);
} }
reverse_iterator rbegin() reverse_iterator rbegin()
@ -117,7 +126,7 @@ class vector
size_type max_size() const 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. 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()) while (n > this->size())
{ {
_end--; _end--;
_allocator.destroy(_end); _alloc.destroy(_end);
} }
} }
//else // n > size //else // n > size
@ -138,12 +147,12 @@ class vector
size_type capacity() const size_type capacity() const
{ {
return (_end_capacity - _start); return (_capacity);
} }
bool empty() const bool empty() const
{ {
if (!_end - _start) if (_end == _start)
return (1); return (1);
return(0); return(0);
} }
@ -200,12 +209,12 @@ class vector
value_type* data() value_type* data()
{ {
return (_tab); return (_start);
} }
const value_type* data() const 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 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) 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() void pop_back()
{ {
_allocator.destroy(_end - 1); //if (!_size)
// ;
//throw std::;
_alloc.destroy(_end - 1);
_end--; _end--;
_size--;
} }
iterator insert (iterator position, const value_type& val) //single element iterator insert (iterator position, const value_type& val) //single element
{ {
} }
void insert (iterator position, size_type n, const value_type& val) //fill 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 swap (vector& x)
{ {
} }
void clear() void clear()
{ {
int i = 0;
while (_start != _end)
this->pop_back();
} }
//------------------------- //-------------------------
//--------Allocator-------- //--------Allocator--------
//------------------------- //-------------------------
allocator_type get_allocator() const allocator_type get_alloc() const
{ {
return (_allocator); return (_alloc);
} }
//--------------------------------------------- //---------------------------------------------
@ -317,12 +359,12 @@ class vector
value_type *_tab; value_type *_tab;
size_type _size; size_type _size;
//size_type _capacity; size_type _capacity;
allocator_type _allocator; allocator_type _alloc;
pointer _end; pointer _end;
pointer _start; pointer _start;
pointer _end_capacity; //pointer _end_capacity;
}; };
} }

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/12 19:46:33 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 "./containers/vector.hpp"
//} //}
# include <iterator>
#endif #endif

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/19 14:04:37 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() void vector_tester()
{ {
ft::vector<int> 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() int main()

BIN
tests/stack_test.o Normal file

Binary file not shown.