iterator?
This commit is contained in:
parent
4a42ab9be1
commit
0cb13009c4
0
containers/iterators/enable_if.hpp
Normal file
0
containers/iterators/enable_if.hpp
Normal file
0
containers/iterators/equal.hpp
Normal file
0
containers/iterators/equal.hpp
Normal file
0
containers/iterators/is_integral.hpp
Normal file
0
containers/iterators/is_integral.hpp
Normal file
28
containers/iterators/iterator.hpp
Normal file
28
containers/iterators/iterator.hpp
Normal 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
|
||||||
0
containers/iterators/iterator_traits.hpp
Normal file
0
containers/iterators/iterator_traits.hpp
Normal file
0
containers/iterators/make_pair.hpp
Normal file
0
containers/iterators/make_pair.hpp
Normal file
0
containers/iterators/pair.hpp
Normal file
0
containers/iterators/pair.hpp
Normal file
77
containers/iterators/random_access_iterator.hpp
Normal file
77
containers/iterators/random_access_iterator.hpp
Normal 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
|
||||||
0
containers/iterators/reverse_iterator.hpp
Normal file
0
containers/iterators/reverse_iterator.hpp
Normal file
43
containers/iterators/vector_iterators.hpp
Normal file
43
containers/iterators/vector_iterators.hpp
Normal 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
|
||||||
@ -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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -29,8 +29,8 @@ class vector
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------
|
//-------------------------
|
||||||
@ -220,17 +229,42 @@ 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
|
||||||
@ -249,7 +283,12 @@ class vector
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
iterator erase (iterator position);iterator erase (iterator first, iterator last)
|
iterator erase (iterator position)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
iterator erase (iterator first, iterator last)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -261,15 +300,18 @@ class vector
|
|||||||
|
|
||||||
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;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
@ -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
BIN
tests/stack_test.o
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user