From 6362a50ffaded3d145a9d35bf1195f2993688564 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Thu, 2 Jun 2022 19:41:34 +0200 Subject: [PATCH] little formating improvement --- headers/ftvector.hpp | 110 ++++++++++++++++++++++--------------------- srcs/ftvector.cpp | 83 +++++++++++++++++++++++++------- 2 files changed, 122 insertions(+), 71 deletions(-) diff --git a/headers/ftvector.hpp b/headers/ftvector.hpp index fc3ac77..bfda8fe 100644 --- a/headers/ftvector.hpp +++ b/headers/ftvector.hpp @@ -15,6 +15,8 @@ public: typedef std::allocator allocator_type; typedef std::size_t size_type; + typedef int * iterator; + ftvector(); ftvector( ftvector const & src ); ~ftvector(); @@ -24,74 +26,74 @@ public: /************* * iterators : *************/ - // begin -// iterator begin(); -// const_iterator begin() const; - // end -// iterator end(); -// const_iterator end() const; - // rbegin -// reverse_iterator rbegin(); -// const_reverse_iterator rbegin() const; - // rend -// reverse_iterator rend(); -// const_reverse_iterator rend() const; +// begin ------------------------------------- + iterator begin(); + //const_iterator begin() const; +// end --------------------------------------- + iterator end(); + //const_iterator end() const; +// rbegin ------------------------------------ + //reverse_iterator rbegin(); + //const_reverse_iterator rbegin() const; +// rend -------------------------------------- + //reverse_iterator rend(); + //const_reverse_iterator rend() const; /************ * capacity : ************/ - // size +// size -------------------------------------- size_type size() const; - // max_size -// size_type max_size() const; - // resize -// void resize(size_type n, value_type val = value_type()); - // capacity -// size_type capacity() const; - // empty -// bool empty() const; - //reserve +// max_size ---------------------------------- + //size_type max_size() const; +// resize ------------------------------------ + //void resize(size_type n, value_type val = value_type()); +// capacity ---------------------------------- + //size_type capacity() const; +// empty ------------------------------------- + //bool empty() const; +// reserve ----------------------------------- void reserve(size_type n); /****************** * element access : ******************/ - // operator[] -// reference operator[](size_type n); -// const_reference operator[](size_type n) const; - // at -// reference at(size_type n); -// const_reference at(size_type n) const; - // front -// reference front(); -// const_reference front() const; - // back -// reference back(); -// const_reference back() const; +// operator[] -------------------------------- + //reference operator[](size_type n); + //const_reference operator[](size_type n) const; +// at ---------------------------------------- + //reference at(size_type n); + //const_reference at(size_type n) const; +// front ------------------------------------- + //reference front(); + //const_reference front() const; +// back -------------------------------------- + //reference back(); + //const_reference back() const; /************* * modifiers : *************/ - // assign -// template -// void assign(InputIterator first, InputIterator last); -// void assign(size_type n, const value_type& val); - // push_back +// assign ------------------------------------ + //template + // void assign(InputIterator first, InputIterator last); + //void assign(size_type n, const value_type& val); +// push_back --------------------------------- void push_back(const value_type & val); - // pop_back -// void pop_back(); - // insert -// iterator insert(iterator position, const value_type& val); -// void insert(iterator position, size_type n, const value_type& val); -// template -// void insert(iterator position, InputIterator first, InputIterator last); - // erase -// iterator erase(iterator position); -// iterator erase(iterator first, iterator last); - // swap -// void swap(vector& x); - // clear -// void clear(); +// pop_back ---------------------------------- + //void pop_back(); +// insert ------------------------------------ + //iterator insert(iterator position, const value_type& val); + //void insert(iterator position, size_type n, const value_type& val); + //template + // void insert(iterator position, InputIterator first, InputIterator last); +// erase ------------------------------------- + //iterator erase(iterator position); + //iterator erase(iterator first, iterator last); +// swap -------------------------------------- + //void swap(vector& x); +// clear ------------------------------------- + //void clear(); private: @@ -101,6 +103,8 @@ private: value_type * _mem_ptr; allocator_type _allocator; + void _destroy(iterator first, iterator last); + }; //std::ostream & operator<<(std::ostream & o, ftvector const & rhs); diff --git a/srcs/ftvector.cpp b/srcs/ftvector.cpp index 82a09fe..30c00d6 100644 --- a/srcs/ftvector.cpp +++ b/srcs/ftvector.cpp @@ -51,31 +51,35 @@ ftvector & ftvector::operator=( ftvector const & rhs ) { // return (o); //} -/********************************************* - * ACCESSORS - *********************************************/ - -ftvector::size_type ftvector::size() const {return _size;} /********************************************* * PUBLIC MEMBER FUNCTIONS *********************************************/ -void ftvector::push_back(const value_type & element) { - if (_size >= _capacity) - { - reserve(std::min(_size + 1, _allocator.max_size() / 2) * 2); - } - _allocator.construct(&_mem_ptr[_size], element); - _size++; - - for (size_type i = 0; i < _size; i++) - std::cout << _mem_ptr[i] << "\n"; - std::cout << "\n"; -} + /************* + * iterators : + *************/ +// begin ------------------------------------- +ftvector::iterator ftvector::begin() {return _mem_ptr;} +// end --------------------------------------- +ftvector::iterator ftvector::end() {return &_mem_ptr[_size];} +// rbegin ------------------------------------ +// rend -------------------------------------- + /************ + * capacity : + ************/ +// size -------------------------------------- +ftvector::size_type ftvector::size() const {return _size;} +// max_size ---------------------------------- +// resize ------------------------------------ +// capacity ---------------------------------- +// empty ------------------------------------- +// reserve ----------------------------------- void ftvector::reserve(size_type new_cap) { value_type * tmp_ptr; + iterator first = begin(); + iterator last = end(); if (new_cap > _allocator.max_size()) throw std::length_error("new_cap > max_size"); @@ -89,19 +93,62 @@ void ftvector::reserve(size_type new_cap) { if (_mem_ptr) { - // TMP + // TMP replacing assign() for (size_type i = 0; i < _size; i++) tmp_ptr[i] = _mem_ptr[i]; // TMP END + _destroy(first, last); _allocator.deallocate(_mem_ptr, _capacity); } _mem_ptr = tmp_ptr; } + /****************** + * element access : + ******************/ +// operator[] -------------------------------- +// at ---------------------------------------- +// front ------------------------------------- +// back -------------------------------------- + + /************* + * modifiers : + *************/ +// assign ------------------------------------ +// push_back --------------------------------- +void ftvector::push_back(const value_type & element) { + if (_size >= _capacity) + reserve(std::min(_size + 1, _allocator.max_size() / 2) * 2); + _allocator.construct(&_mem_ptr[_size], element); + _size++; + + // TMP + for (size_type i = 0; i < _size; i++) + std::cout << _mem_ptr[i] << "\n"; + std::cout << "\n"; + // TMP END +} +// pop_back ---------------------------------- +// insert ------------------------------------ +// erase ------------------------------------- +// swap -------------------------------------- +// clear ------------------------------------- + + + + /********************************************* * PRIVATE MEMBER FUNCTIONS *********************************************/ +void ftvector::_destroy(iterator first, iterator last) { + while (first != last) + { + _allocator.destroy(first); + first++; + } +} + /********************************************* * NESTED CLASS *********************************************/