vector finish

This commit is contained in:
hugogogo
2022-06-14 21:25:16 +02:00
parent 988d67e908
commit 005382a3ac
11 changed files with 584 additions and 71 deletions

View File

@@ -4,6 +4,8 @@
namespace ft {
/*********************************************
* COPLIENS
*********************************************/
@@ -39,7 +41,11 @@ VT_TPL template <class InputIterator> VT::
}
// copy constructor --------------------------
VT_TPL VT::
vector( vector const & src ) {
vector( vector const & src )
: _size(0)
, _capacity(0)
, _mem_ptr(NULL)
, _allocator(src._allocator) {
*this = src;
return;
@@ -64,13 +70,11 @@ VT_TPL VT & VT::
return *this;
}
/*********************************************
* PUBLIC MEMBER FUNCTIONS
*********************************************/
/*************
* iterators :
*************/
/*************
* iterators :
*************/
// begin -------------------------------------
VT_TPL typename VT::iterator VT::
begin() { return _mem_ptr; }
@@ -82,19 +86,21 @@ VT_TPL typename VT::iterator VT::
VT_TPL typename VT::const_iterator VT::
end() const { return &_mem_ptr[_size]; }
// rbegin ------------------------------------
//VT_TPL typename VT::reverse_iterator VT::
// rbegin() { return reverse_iterator(end()); }
//VT_TPL typename VT::const_reverse_iterator VT::
// rbegin() const { return const_reverse_iterator(end()); }
VT_TPL typename VT::reverse_iterator VT::
rbegin() { return reverse_iterator(end()); }
VT_TPL typename VT::const_reverse_iterator VT::
rbegin() const { return const_reverse_iterator(end()); }
// rend --------------------------------------
//VT_TPL typename VT::reverse_iterator VT::
// rend() { return reverse_iterator(begin()); }
//VT_TPL typename VT::const_reverse_iterator VT::
// rend() const { return const_reverse_iterator(begin()); }
VT_TPL typename VT::reverse_iterator VT::
rend() { return reverse_iterator(begin()); }
VT_TPL typename VT::const_reverse_iterator VT::
rend() const { return const_reverse_iterator(begin()); }
/************
* capacity :
************/
/************
* capacity :
************/
// size --------------------------------------
VT_TPL typename VT::size_type VT::
size( ) const { return _size; }
@@ -153,9 +159,11 @@ VT_TPL void VT::
_mem_ptr = tmp_ptr;
}
/******************
* element access :
******************/
/******************
* element access :
******************/
// operator[] --------------------------------
VT_TPL typename VT::reference VT::
operator[](size_type n) { return _mem_ptr[n]; }
@@ -187,9 +195,11 @@ VT_TPL typename VT::reference VT::
VT_TPL typename VT::const_reference VT::
back() const { return (_mem_ptr[_size - 1]); }
/*************
* modifiers :
*************/
/*************
* modifiers :
*************/
// assign ------------------------------------
VT_TPL template <class InputIterator>
typename enable_if< !is_integral<InputIterator>::value,void >::type VT::
@@ -338,9 +348,6 @@ typename enable_if< !is_integral<InputIterator>::value,void >::type VT::
_destroy(position, std::min(position + n, it_end));
}
// for (size_type i = 0; i < n; i++, position++)
// _allocator.construct(position, val);
while (first != last)
{
_allocator.construct(position, *first);
@@ -421,10 +428,10 @@ VT_TPL typename VT::allocator_type VT::
get_allocator() const { return (_allocator); }
/*********************************************
* PRIVATE MEMBER FUNCTIONS
*********************************************/
VT_TPL void VT::
_destroy(iterator first, iterator last) {
@@ -434,7 +441,6 @@ VT_TPL void VT::
first++;
}
}
VT_TPL void VT::
_increment_capacity(size_type n) {
@@ -445,30 +451,54 @@ VT_TPL void VT::
}
/*********************************************
* OPERATORS
*********************************************/
//std::ostream & operator<<(std::ostream & o, vector const & rhs)
//{
// o << rhs.getFoo();
// return (o);
//}
/*********************************************
* NESTED CLASS
*********************************************/
//void vector::Class::function() {}
/*********************************************
* STATICS
*********************************************/
//std::string const vector::_bar = "bar";
/************************
* non-member functions :
************************/
// operator == -------------------------------
VT_TPL
bool operator== (const VT & lhs, const VT & rhs) {
if (lhs.size() != rhs.size())
return false;
return ft::equal(lhs.begin(), lhs.end(), rhs.begin());
}
// operator < --------------------------------
VT_TPL
bool operator< (const VT & lhs, const VT & rhs) {
return ft::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
}
// operator != -------------------------------
VT_TPL
bool operator!= (const VT & lhs, const VT & rhs) { return !(lhs == rhs); }
// operator <= -------------------------------
VT_TPL
bool operator<= (const VT & lhs, const VT & rhs) { return !(lhs > rhs); }
// operator > --------------------------------
VT_TPL
bool operator> (const VT & lhs, const VT & rhs) { return (rhs < lhs); }
// operator >= -------------------------------
VT_TPL
bool operator>= (const VT & lhs, const VT & rhs) { return !(lhs < rhs); }
// swap (vector) -------------------------------
VT_TPL
void swap (VT & lhs, VT & rhs) { lhs.swap(rhs); }
} // namespace ft
#undef VT