correction vector
This commit is contained in:
parent
7a299887cf
commit
435dac1965
6
Makefile
6
Makefile
@ -6,14 +6,14 @@
|
|||||||
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
|
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2022/10/12 19:45:18 by apommier #+# #+# #
|
# Created: 2022/10/12 19:45:18 by apommier #+# #+# #
|
||||||
# Updated: 2022/11/16 21:54:17 by apommier ### ########.fr #
|
# Updated: 2022/11/19 01:32:23 by apommier ### ########.fr #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
NAME = a.out
|
NAME = a.out
|
||||||
SRCS = tests/main.cpp
|
SRCS = tests/main.cpp
|
||||||
|
|
||||||
|
INCLUDE = ./containers
|
||||||
OBJS = ${SRCS:.cpp=.o}
|
OBJS = ${SRCS:.cpp=.o}
|
||||||
CC = c++
|
CC = c++
|
||||||
CFLAGS = -g -Wall -Wextra -Werror -std=c++98
|
CFLAGS = -g -Wall -Wextra -Werror -std=c++98
|
||||||
@ -23,7 +23,7 @@ RM = rm -rf
|
|||||||
$(CC) ${CFLAGS} -c $< -o $(<:.cpp=.o)
|
$(CC) ${CFLAGS} -c $< -o $(<:.cpp=.o)
|
||||||
|
|
||||||
${NAME}: ${OBJS}
|
${NAME}: ${OBJS}
|
||||||
${CC} ${LIB} ${OBJS} -o ${NAME}
|
${CC} ${LIB} ${OBJS} ${INCLUDE} -o ${NAME}
|
||||||
|
|
||||||
all: ${NAME}
|
all: ${NAME}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,24 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* enable_if.hpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2022/11/19 05:59:46 by apommier #+# #+# */
|
||||||
|
/* Updated: 2022/11/19 10:55:47 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ft
|
||||||
|
{
|
||||||
|
template < bool B, class T = void >
|
||||||
|
struct enable_if {};
|
||||||
|
|
||||||
|
template < class T >
|
||||||
|
struct enable_if< true, T > {
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* is_integral.hpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2022/11/19 10:55:07 by apommier #+# #+# */
|
||||||
|
/* Updated: 2022/11/19 10:55:51 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ft
|
||||||
|
{
|
||||||
|
template <class T> struct is_integral { static const bool value = false; };
|
||||||
|
template <> struct is_integral<bool> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<char> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<signed char> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<unsigned char> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<wchar_t> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<short> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<int> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<long> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<long long> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<unsigned short> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<unsigned int> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<unsigned long> { static const bool value = true; };
|
||||||
|
template <> struct is_integral<unsigned long long> { static const bool value = true; };
|
||||||
|
}
|
||||||
@ -1,28 +0,0 @@
|
|||||||
/* ************************************************************************** */
|
|
||||||
/* */
|
|
||||||
/* ::: :::::::: */
|
|
||||||
/* 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,0 +1,27 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* iterator_traits.hpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2022/11/19 05:07:29 by apommier #+# #+# */
|
||||||
|
/* Updated: 2022/11/19 05:09:05 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ft
|
||||||
|
{
|
||||||
|
template<typename Iterator>
|
||||||
|
struct iterator_traits {
|
||||||
|
|
||||||
|
typedef typename Iterator::iterator_category iterator_category;
|
||||||
|
typedef typename Iterator::value_type value_type;
|
||||||
|
typedef typename Iterator::difference_type difference_type;
|
||||||
|
typedef difference_type distance_type;
|
||||||
|
typedef typename Iterator::pointer pointer;
|
||||||
|
typedef typename Iterator::reference reference;
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -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/16 19:21:41 by apommier ### ########.fr */
|
/* Updated: 2022/11/19 12:42:38 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -21,12 +21,12 @@ namespace ft
|
|||||||
class random_access_iterator
|
class random_access_iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef T value_type;
|
typedef T value_type;
|
||||||
typedef std::ptrdiff_t difference_type;
|
typedef std::ptrdiff_t difference_type;
|
||||||
typedef T* pointer;
|
typedef T* pointer;
|
||||||
typedef T& reference;
|
typedef T& reference;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
pointer _ptr;
|
pointer _ptr;
|
||||||
@ -40,7 +40,7 @@ namespace ft
|
|||||||
random_access_iterator(){ _ptr = NULL;}
|
random_access_iterator(){ _ptr = NULL;}
|
||||||
random_access_iterator(pointer ptr){ _ptr = ptr;}
|
random_access_iterator(pointer ptr){ _ptr = ptr;}
|
||||||
random_access_iterator(random_access_iterator const &cpy) {*this = cpy;}
|
random_access_iterator(random_access_iterator const &cpy) {*this = cpy;}
|
||||||
|
|
||||||
~random_access_iterator(){}
|
~random_access_iterator(){}
|
||||||
|
|
||||||
random_access_iterator &operator=(random_access_iterator const &cpy)
|
random_access_iterator &operator=(random_access_iterator const &cpy)
|
||||||
@ -49,6 +49,10 @@ namespace ft
|
|||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
operator random_access_iterator<value_type const>() const
|
||||||
|
{
|
||||||
|
return (random_access_iterator<value_type const>(_ptr));
|
||||||
|
}
|
||||||
// random_access_iterator &operator=(pointer &ptr)
|
// random_access_iterator &operator=(pointer &ptr)
|
||||||
// {
|
// {
|
||||||
// _ptr = ptr;
|
// _ptr = ptr;
|
||||||
@ -70,20 +74,20 @@ namespace ft
|
|||||||
//-------------INCREMENTERS--------------
|
//-------------INCREMENTERS--------------
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
|
|
||||||
random_access_iterator &operator ++()
|
random_access_iterator &operator ++()
|
||||||
{
|
{
|
||||||
_ptr++;
|
_ptr++;
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
random_access_iterator operator ++(int)
|
random_access_iterator operator ++(int)
|
||||||
{
|
{
|
||||||
random_access_iterator tmp(*this);
|
random_access_iterator tmp(*this);
|
||||||
++(*this);
|
++(*this);
|
||||||
return (tmp);
|
return (tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
random_access_iterator &operator --()
|
random_access_iterator &operator --()
|
||||||
{
|
{
|
||||||
_ptr--;
|
_ptr--;
|
||||||
return (*this);
|
return (*this);
|
||||||
@ -99,10 +103,13 @@ namespace ft
|
|||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
//----------------ADRESS-----------------
|
//----------------ADRESS-----------------
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
|
|
||||||
value_type operator *() { return (*_ptr); }
|
reference operator *() { return (*_ptr); }
|
||||||
|
reference operator *() const { return (*_ptr); }
|
||||||
pointer operator ->() { return (_ptr); }
|
pointer operator ->() { return (_ptr); }
|
||||||
value_type operator [](difference_type nbr) { return (*(_ptr + nbr)); }
|
pointer operator ->() const { return (_ptr); }
|
||||||
|
// reference operator [](difference_type nbr) { return (*(_ptr + nbr)); } const
|
||||||
|
reference operator [](difference_type nbr) const { return (*(_ptr + nbr)); }
|
||||||
|
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
//--------------OPERATION----------------
|
//--------------OPERATION----------------
|
||||||
@ -111,7 +118,7 @@ namespace ft
|
|||||||
// addition | soustraction
|
// addition | soustraction
|
||||||
random_access_iterator operator +(difference_type const nbr) const { return (random_access_iterator(_ptr + nbr)); } // a + n
|
random_access_iterator operator +(difference_type const nbr) const { return (random_access_iterator(_ptr + nbr)); } // a + n
|
||||||
friend random_access_iterator operator +(int const lhs, random_access_iterator const& rhs) { return (rhs + lhs); } // n + a
|
friend random_access_iterator operator +(int const lhs, random_access_iterator const& rhs) { return (rhs + lhs); } // n + a
|
||||||
random_access_iterator &operator -(difference_type nbr) { return random_access_iterator(_ptr - nbr); } // a - n
|
random_access_iterator operator -(difference_type nbr) { return random_access_iterator(_ptr - nbr); } // a - n
|
||||||
difference_type operator -(random_access_iterator const &rhs) const { return (_ptr - rhs._ptr) ; } // a - b
|
difference_type operator -(random_access_iterator const &rhs) const { return (_ptr - rhs._ptr) ; } // a - b
|
||||||
//friend difference_type &operator -(random_access_iterator const& lhs, random_access_iterator const& rhs) { return ((difference_type)(lhs._ptr - rhs._ptr)); } // a - b
|
//friend difference_type &operator -(random_access_iterator const& lhs, random_access_iterator const& rhs) { return ((difference_type)(lhs._ptr - rhs._ptr)); } // a - b
|
||||||
//random_access_iterator operator -(const random_access_iterator &b) { return random_access_iterator(_ptr + b); } // a - b 2?
|
//random_access_iterator operator -(const random_access_iterator &b) { return random_access_iterator(_ptr + b); } // a - b 2?
|
||||||
|
|||||||
@ -0,0 +1,83 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* reverse_iterator.hpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2022/11/19 05:14:31 by apommier #+# #+# */
|
||||||
|
/* Updated: 2022/11/19 05:49:52 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#ifndef REVERSE_ITERATOR_HPP
|
||||||
|
# define REVERSE_ITERATOR_HPP
|
||||||
|
|
||||||
|
# include <cstddef>
|
||||||
|
|
||||||
|
namespace ft
|
||||||
|
{
|
||||||
|
template<typename Iter>
|
||||||
|
class reverse_iterator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef Iter iterator_type;
|
||||||
|
typedef typename ft::iterator_traits<Iter>::iterator_category iterator_category;
|
||||||
|
typedef typename ft::iterator_traits<Iter>::value_type value_type;
|
||||||
|
typedef typename ft::iterator_traits<Iter>::difference_type difference_type;
|
||||||
|
typedef typename ft::iterator_traits<Iter>::pointer pointer;
|
||||||
|
typedef typename ft::iterator_traits<Iter>::reference reference;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
Iter _Ite;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//---------------------------------------
|
||||||
|
//--------CONSTRUCTOR DESTRUCTOR---------
|
||||||
|
//---------------------------------------
|
||||||
|
|
||||||
|
reverse_iterator(){}
|
||||||
|
reverse_iterator(pointer Ite){}
|
||||||
|
reverse_iterator(reverse_iterator const &cpy) {}
|
||||||
|
|
||||||
|
~reverse_iterator(){}
|
||||||
|
|
||||||
|
reverse_iterator &operator=(reverse_iterator const &cpy)
|
||||||
|
{
|
||||||
|
_Ite = cpy._Ite;
|
||||||
|
return (*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------
|
||||||
|
//-------------COMPARAISON---------------
|
||||||
|
//---------------------------------------
|
||||||
|
|
||||||
|
//---------------------------------------
|
||||||
|
//-------------INCREMENTERS--------------
|
||||||
|
//---------------------------------------
|
||||||
|
|
||||||
|
//---------------------------------------
|
||||||
|
//----------------ADRESS-----------------
|
||||||
|
//---------------------------------------
|
||||||
|
|
||||||
|
reference operator *() { return (*_Ite); }
|
||||||
|
const reference operator *() const { return (*_Ite); }
|
||||||
|
pointer operator ->() { return (_Ite); }
|
||||||
|
const pointer operator ->() const { return (_Ite); }
|
||||||
|
reference operator [](difference_type nbr) const { return (*(_Ite + nbr)); }
|
||||||
|
|
||||||
|
//---------------------------------------
|
||||||
|
//--------------OPERATION----------------
|
||||||
|
//---------------------------------------
|
||||||
|
|
||||||
|
//---------------------------------
|
||||||
|
//--------------GET----------------
|
||||||
|
//---------------------------------
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,43 +0,0 @@
|
|||||||
/* ************************************************************************** */
|
|
||||||
/* */
|
|
||||||
/* ::: :::::::: */
|
|
||||||
/* 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:25 by apommier #+# #+# */
|
/* Created: 2022/10/12 19:46:25 by apommier #+# #+# */
|
||||||
/* Updated: 2022/11/17 07:41:22 by apommier ### ########.fr */
|
/* Updated: 2022/11/18 11:58:52 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -30,19 +30,19 @@ class map
|
|||||||
//---------MEMBER TYPE---------
|
//---------MEMBER TYPE---------
|
||||||
//-----------------------------
|
//-----------------------------
|
||||||
|
|
||||||
typedef Key key_type;
|
typedef Key key_type;
|
||||||
typedef T mapped_type;
|
typedef T mapped_type;
|
||||||
typedef std::pair<const Key, T> value_type;
|
typedef std::pair<const Key, T> value_type;
|
||||||
typedef std::size_t size_type;
|
typedef std::size_t size_type;
|
||||||
typedef std::ptrdiff_t difference_type;
|
typedef std::ptrdiff_t difference_type;
|
||||||
typedef Compare key_compare;
|
typedef Compare key_compare;
|
||||||
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 Allocator::pointer pointer;
|
typedef Allocator::pointer pointer;
|
||||||
typedef Allocator::const_pointer const_pointer;
|
typedef Allocator::const_pointer const_pointer;
|
||||||
typedef LegacyBidirectionalIterator iterator;
|
typedef LegacyBidirectionalIterator iterator;
|
||||||
typedef LegacyBidirectionalIterator const_iterator;
|
typedef LegacyBidirectionalIterator 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;
|
||||||
|
|
||||||
@ -51,27 +51,38 @@ class map
|
|||||||
//-----------------------------
|
//-----------------------------
|
||||||
private :
|
private :
|
||||||
|
|
||||||
pointer _start;
|
pointer _start;
|
||||||
|
pointer _end;
|
||||||
|
size_type _size;
|
||||||
|
size_type _capacity;
|
||||||
|
allocator_type _alloc;
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
//---------COPLIEN FORM FUNCTION---------
|
//---------COPLIEN FORM FUNCTION---------
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
map();
|
map()
|
||||||
|
{
|
||||||
|
_start = 0;
|
||||||
|
_end = 0;
|
||||||
|
_size = 0;
|
||||||
|
_capacity = 0;
|
||||||
|
_alloc = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
explicit map( const Compare& comp, const Allocator& alloc = Allocator() )
|
explicit map( const Compare& comp, const Allocator& alloc = Allocator() )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template< class InputIt >
|
template< class InputIt >
|
||||||
map( InputIt first, InputIt last, const Compare& comp = Compare(), const Allocator& alloc = Allocator() )
|
map( InputIt first, InputIt last, const Compare& comp = Compare(), const Allocator& alloc = Allocator() )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
map( const map& x)
|
map( const map& x)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -81,14 +92,12 @@ class map
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
map& operator=( const map& x )
|
map& operator=( const map& x )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------
|
//----------------------------------
|
||||||
//---------MEMBER FUNCTION----------
|
//---------MEMBER FUNCTION----------
|
||||||
//----------------------------------
|
//----------------------------------
|
||||||
@ -218,7 +227,6 @@ class map
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------
|
//-------------------------
|
||||||
//--------Observers--------
|
//--------Observers--------
|
||||||
//-------------------------
|
//-------------------------
|
||||||
@ -282,7 +290,6 @@ class map
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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/17 06:53:12 by apommier ### ########.fr */
|
/* Updated: 2022/11/20 02:57:45 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -14,6 +14,8 @@
|
|||||||
# define VECTOR_HPP
|
# define VECTOR_HPP
|
||||||
|
|
||||||
# include "./iterators/random_access_iterator.hpp"
|
# include "./iterators/random_access_iterator.hpp"
|
||||||
|
# include "./iterators/enable_if.hpp"
|
||||||
|
# include "./iterators/is_integral.hpp"
|
||||||
|
|
||||||
# include <cstddef>
|
# include <cstddef>
|
||||||
# include <memory>
|
# include <memory>
|
||||||
@ -37,7 +39,7 @@ class vector
|
|||||||
typedef T* pointer;
|
typedef T* pointer;
|
||||||
typedef const T* const_pointer;
|
typedef const T* const_pointer;
|
||||||
typedef ft::random_access_iterator<value_type> iterator;
|
typedef ft::random_access_iterator<value_type> iterator;
|
||||||
typedef const ft::random_access_iterator<value_type> const_iterator;
|
typedef ft::random_access_iterator<const 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;
|
||||||
@ -49,7 +51,7 @@ class vector
|
|||||||
//-----------------------------
|
//-----------------------------
|
||||||
private:
|
private:
|
||||||
|
|
||||||
value_type *_tab;
|
pointer _tab;
|
||||||
size_type _size;
|
size_type _size;
|
||||||
size_type _capacity;
|
size_type _capacity;
|
||||||
|
|
||||||
@ -74,35 +76,32 @@ class vector
|
|||||||
|
|
||||||
explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type()): _alloc(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;
|
|
||||||
|
|
||||||
_alloc = alloc;
|
|
||||||
_tab = _alloc.allocate(n);
|
_tab = _alloc.allocate(n);
|
||||||
_size = n;
|
_size = n;
|
||||||
_capacity = n;
|
_capacity = n;
|
||||||
while (n--)
|
while (n--)
|
||||||
_alloc.construct(_tab + n, val);
|
_alloc.construct(_tab + n, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
vector (const vector& x)//copy constructor
|
vector (const vector& x)//copy constructor
|
||||||
{
|
{
|
||||||
*this = x;
|
*this = x;
|
||||||
}
|
}
|
||||||
|
|
||||||
~vector()
|
~vector()
|
||||||
{
|
{
|
||||||
if (_tab && _capacity)
|
if (_capacity)
|
||||||
_alloc.deallocate(_tab, _capacity);
|
_alloc.deallocate(_tab, _capacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
vector& operator= (const vector& x)//assignation operator
|
vector& operator= (const vector& x)//assignation operator
|
||||||
{
|
{
|
||||||
_tab = x._tab;
|
_alloc = x._alloc;
|
||||||
_size = x._size;
|
_size = x._size;
|
||||||
_capacity = x._capacity;
|
_capacity = x._size;
|
||||||
_alloc = x._alloc;
|
_tab = _alloc.allocate(_size);
|
||||||
|
for (size_type i = 0; i < _size; i++)
|
||||||
|
_alloc.construct(_tab + i, x._tab[i]);
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,23 +114,43 @@ class vector
|
|||||||
//-------------------------
|
//-------------------------
|
||||||
iterator begin()
|
iterator begin()
|
||||||
{
|
{
|
||||||
return (_tab);
|
return (iterator(_tab));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const_iterator begin() const
|
||||||
|
{
|
||||||
|
return const_iterator(_tab);
|
||||||
|
}
|
||||||
|
|
||||||
iterator end()
|
iterator end()
|
||||||
{
|
{
|
||||||
return (_tab + _size);
|
return iterator(_tab + _size);
|
||||||
|
}
|
||||||
|
|
||||||
|
const_iterator end() const
|
||||||
|
{
|
||||||
|
return const_iterator(_tab + _size);
|
||||||
}
|
}
|
||||||
|
|
||||||
reverse_iterator rbegin()
|
reverse_iterator rbegin()
|
||||||
{
|
{
|
||||||
return (_tab + _size);
|
return iterator(_tab + _size);
|
||||||
|
}
|
||||||
|
|
||||||
|
const_reverse_iterator rbegin() const
|
||||||
|
{
|
||||||
|
return iterator(_tab + _size);
|
||||||
}
|
}
|
||||||
|
|
||||||
reverse_iterator rend()
|
reverse_iterator rend()
|
||||||
{
|
{
|
||||||
return (_tab);
|
return (_tab);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const_reverse_iterator rend() const
|
||||||
|
{
|
||||||
|
return (_tab);
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------
|
//------------------------
|
||||||
//--------Capacity--------
|
//--------Capacity--------
|
||||||
@ -164,9 +183,10 @@ class vector
|
|||||||
while (n > _size)
|
while (n > _size)
|
||||||
{
|
{
|
||||||
_alloc.construct(_tab + _size, val);
|
_alloc.construct(_tab + _size, val);
|
||||||
|
_size++;
|
||||||
//_end++;
|
//_end++;
|
||||||
}
|
}
|
||||||
_size = n;
|
//_size = n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,13 +234,17 @@ class vector
|
|||||||
reference at (size_type n)
|
reference at (size_type n)
|
||||||
{
|
{
|
||||||
//exception
|
//exception
|
||||||
return (_tab[n]);
|
if (n >= _size)
|
||||||
|
throw (std::out_of_range("ft::vector::at"));
|
||||||
|
return (*(_tab + n));
|
||||||
}
|
}
|
||||||
|
|
||||||
const_reference at (size_type n) const
|
const_reference at (size_type n) const
|
||||||
{
|
{
|
||||||
//exception
|
//exception
|
||||||
return (_tab[n]);
|
if (n >= _size)
|
||||||
|
throw (std::out_of_range("ft::vector::at"));
|
||||||
|
return (*(_tab + n));
|
||||||
}
|
}
|
||||||
|
|
||||||
reference front()
|
reference front()
|
||||||
@ -235,12 +259,12 @@ class vector
|
|||||||
|
|
||||||
reference back()
|
reference back()
|
||||||
{
|
{
|
||||||
return (*(_tab + _size));
|
return (*(_tab + _size - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
const_reference back() const
|
const_reference back() const
|
||||||
{
|
{
|
||||||
return (*(_tab + _size));
|
return (*(_tab + _size - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
value_type* data()
|
value_type* data()
|
||||||
@ -256,8 +280,10 @@ class vector
|
|||||||
//-------------------------
|
//-------------------------
|
||||||
//--------Modifiers--------
|
//--------Modifiers--------
|
||||||
//-------------------------
|
//-------------------------
|
||||||
|
|
||||||
template <class InputIterator>
|
template <class InputIterator>
|
||||||
void assign (InputIterator first, InputIterator last) //range
|
//void assign (InputIterator first, InputIterator last) //range
|
||||||
|
void assign (InputIterator first, InputIterator last, typename ft::enable_if<!ft::is_integral<InputIterator>::value, InputIterator>::type* = 0)
|
||||||
{
|
{
|
||||||
this->clear();
|
this->clear();
|
||||||
while (first < last)
|
while (first < last)
|
||||||
@ -277,12 +303,13 @@ class vector
|
|||||||
_alloc.construct(_tab + n, val);
|
_alloc.construct(_tab + n, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void push_back (const value_type& val)
|
void push_back (const_reference val)
|
||||||
{
|
{
|
||||||
if (!_capacity)
|
if (!_capacity)
|
||||||
this->reserve(1);
|
this->reserve(1);
|
||||||
else if (_size == _capacity)
|
else if (_size == _capacity)
|
||||||
this->reserve(_size);
|
this->reserve(_size * 2);
|
||||||
|
//std::cout << "coucou1\n";
|
||||||
_alloc.construct(_tab + _size, val);
|
_alloc.construct(_tab + _size, val);
|
||||||
_size++;
|
_size++;
|
||||||
}
|
}
|
||||||
@ -299,6 +326,7 @@ class vector
|
|||||||
iterator insert (iterator position, const value_type& val) //single element
|
iterator insert (iterator position, const value_type& val) //single element
|
||||||
{
|
{
|
||||||
this->insert(position, 1, val);
|
this->insert(position, 1, val);
|
||||||
|
return (position);
|
||||||
}
|
}
|
||||||
|
|
||||||
void insert (iterator position, size_type n, const value_type& val) //fill
|
void insert (iterator position, size_type n, const value_type& val) //fill
|
||||||
@ -335,11 +363,11 @@ class vector
|
|||||||
if (_size + (last - first) > this->max_size())
|
if (_size + (last - first) > this->max_size())
|
||||||
throw (std::length_error("vector::resize"));
|
throw (std::length_error("vector::resize"));
|
||||||
tmp = _alloc.allocate(_size + (last - first));
|
tmp = _alloc.allocate(_size + (last - first));
|
||||||
for (i = 0; i < position; i++)
|
for (i = 0; i < position - _tab; i++)
|
||||||
tmp[i] = _tab[i];
|
tmp[i] = _tab[i];
|
||||||
while (first + j != last)
|
while (first + j != last)
|
||||||
{
|
{
|
||||||
tmp[i + j] = *(first + j);
|
tmp[i + j] = *(j + first);
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
while (_size - i)
|
while (_size - i)
|
||||||
@ -352,31 +380,42 @@ class vector
|
|||||||
|
|
||||||
iterator erase (iterator position)
|
iterator erase (iterator position)
|
||||||
{
|
{
|
||||||
iterator ret = position;
|
_alloc.destroy(&(*position));
|
||||||
_alloc.destroy(position);
|
// while (_tab + _size - 1 > _tab + (position - _tab))
|
||||||
while (_tab + _size - 1 > position + _tab)
|
// {
|
||||||
|
// *position = *(position + 1);
|
||||||
|
// position++;
|
||||||
|
// _alloc.destroy(&(*position));
|
||||||
|
// }
|
||||||
|
for (size_type i = 0; _tab + _size - 1 > _tab + (position - _tab + i); i++)
|
||||||
{
|
{
|
||||||
*position = *(position + 1);
|
_alloc.construct(&(*(position + i)), *(position + i + 1));
|
||||||
position++;
|
_alloc.destroy(&(*(position + i + 1)));
|
||||||
_alloc.destroy(position);
|
|
||||||
}
|
}
|
||||||
_size--;
|
_size--;
|
||||||
return (ret + 1);
|
return (position);
|
||||||
}
|
}
|
||||||
|
|
||||||
iterator erase (iterator first, iterator last)
|
iterator erase (iterator first, iterator last)
|
||||||
{
|
{
|
||||||
difference_type lenght = last - first;
|
difference_type lenght = last - first;
|
||||||
|
//std::cout << "diff = " << lenght << std::endl;
|
||||||
for (int i = 0; lenght - i; i++)
|
|
||||||
_alloc.destroy(first + i);
|
int i;
|
||||||
while (_tab + _size - 1 != _tab + lenght)
|
for (i = 0; lenght - i - 1; i++)
|
||||||
|
_alloc.destroy(&(*(first + i)));
|
||||||
|
for (i = 0; _size - i - 1; i++)
|
||||||
{
|
{
|
||||||
*first = *(first + lenght);
|
_alloc.construct(&(*(first + i)), *(first + lenght + i));
|
||||||
first++;
|
_alloc.destroy(&(*(first + lenght + i )));
|
||||||
_alloc.destroy(first + lenght);
|
}
|
||||||
}
|
// for (; _size - lenght - i; i++)
|
||||||
return (last + 1);
|
// {
|
||||||
|
// _alloc.construct(&(*(first + i)), *(first + lenght + i));
|
||||||
|
// _alloc.destroy(&(*(first + _size - lenght + i )));
|
||||||
|
// }
|
||||||
|
_size -= lenght;
|
||||||
|
return (first);
|
||||||
}
|
}
|
||||||
|
|
||||||
void swap (vector& x)
|
void swap (vector& x)
|
||||||
|
|||||||
@ -1,17 +0,0 @@
|
|||||||
/* ************************************************************************** */
|
|
||||||
/* */
|
|
||||||
/* ::: :::::::: */
|
|
||||||
/* stack_test.cpp :+: :+: :+: */
|
|
||||||
/* +:+ +:+ +:+ */
|
|
||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
|
||||||
/* +#+#+#+#+#+ +#+ */
|
|
||||||
/* Created: 2022/10/19 14:04:13 by apommier #+# #+# */
|
|
||||||
/* Updated: 2022/10/19 14:29:06 by apommier ### ########.fr */
|
|
||||||
/* */
|
|
||||||
/* ************************************************************************** */
|
|
||||||
|
|
||||||
// void tester()
|
|
||||||
// {
|
|
||||||
// //ft::stack first()
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
Loading…
Reference in New Issue
Block a user