first push cpp08

This commit is contained in:
Alexandre POMMIER 2022-08-07 23:54:00 +02:00
parent b9acd5add2
commit 34ee83b845
6 changed files with 256 additions and 15 deletions

View File

@ -6,16 +6,17 @@
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ # # By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2022/08/07 20:32:52 by apommier #+# #+# # # Created: 2022/08/07 20:32:52 by apommier #+# #+# #
# Updated: 2022/08/07 20:33:01 by apommier ### ########.fr # # Updated: 2022/08/07 22:48:52 by apommier ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
NAME = a.out NAME = a.out
SRCS = main.cpp SRCS = main.cpp\
Span.cpp
OBJS = ${SRCS:.cpp=.o} OBJS = ${SRCS:.cpp=.o}
CC = c++ CC = c++
CFLAGS = -Wall -Wextra -Werror -std=c++98 CFLAGS = -Wall -Wextra -Werror -std=c++98 -g
RM = rm -rf RM = rm -rf
.cpp.o: .cpp.o:

View File

@ -6,10 +6,12 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/08/07 20:32:51 by apommier #+# #+# */ /* Created: 2022/08/07 20:32:51 by apommier #+# #+# */
/* Updated: 2022/08/07 22:04:55 by apommier ### ########.fr */ /* Updated: 2022/08/07 23:09:03 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "Span.hpp"
Span::Span() Span::Span()
{ {
this->_storageSize = 0; this->_storageSize = 0;
@ -30,24 +32,43 @@ Span::~Span()
} }
void Span::addNumber() void Span::addNumber(int nbr)
{ {
if ((int)this->_storage.size() >= this->_storageSize)
throw Span::fullContainer();
this->_storage.push_back(nbr);
} }
int Span::shortestSpan() int Span::shortestSpan()
{ {
std::vector<int> tmp = this->_storage;
if (this->_storage.size() < 2)
throw Span::notEnoughNumber();
std::sort(tmp.begin(), tmp.end());
int ret = tmp[1] - tmp[0];
for (int i = 1; i < (int)tmp.size() - 1; i++)
{
//std::cout << "ret= " << ret << " | value = " << tmp[i + 1] - tmp[i] << " | tmp[i]= " << tmp[i+1] << " " << tmp[i]<< std::endl;
if (tmp[i + 1] - tmp[i] < ret)
ret = tmp[i + 1] - tmp[i];
}
return (ret);
} }
int Span::longestSpan() int Span::longestSpan()
{ {
if (this->_storage.size() < 2)
throw Span::notEnoughNumber();
return (*max_element(this->_storage.begin(), this->_storage.end()) - *min_element(this->_storage.begin(), this->_storage.end()));
} }
void Span::addRangeOfIterators() void Span::addRangeOfIterators(int *nb, int size)
{ {
if ((int)this->_storage.size() > this->_storageSize - size)
throw Span::fullContainer();
this->_storage.insert(this->_storage.end(), nb, nb + size);
} }
Span &Span::operator=( const Span &rhs ) Span &Span::operator=( const Span &rhs )

View File

@ -6,10 +6,14 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/08/07 20:33:52 by apommier #+# #+# */ /* Created: 2022/08/07 20:33:52 by apommier #+# #+# */
/* Updated: 2022/08/07 22:04:22 by apommier ### ########.fr */ /* Updated: 2022/08/07 23:23:13 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include <algorithm>
#include <iostream>
#include <vector>
class Span{ class Span{
public : public :
@ -17,17 +21,17 @@ class Span{
Span(unsigned int size); Span(unsigned int size);
Span(const Span &copy); Span(const Span &copy);
~Span(); ~Span();
void addNumber(); void addNumber(int);
int shortestSpan(); int shortestSpan();
int longestSpan(); int longestSpan();
void addRangeOfIterators(); void addRangeOfIterators(int *nb, int size);
Span &operator=( const Span &rhs ); Span &operator=( const Span &rhs );
class fullContainer : public std::exception { class fullContainer : public std::exception {
char const *what() const throw() char const *what() const throw()
{ {
return ("Container is full !"); return ("Container can't accept those number because he doesn't have enough memory !");
} }
}; };
@ -42,4 +46,4 @@ class Span{
std::vector<int> _storage; std::vector<int> _storage;
int _storageSize; int _storageSize;
} };

View File

@ -6,11 +6,111 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/08/07 20:32:50 by apommier #+# #+# */ /* Created: 2022/08/07 20:32:50 by apommier #+# #+# */
/* Updated: 2022/08/07 20:33:25 by apommier ### ########.fr */ /* Updated: 2022/08/07 23:16:52 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "Span.hpp"
int main() int main()
{ {
Span sp = Span(5);
sp.addNumber(6);
sp.addNumber(-3);
sp.addNumber(17);
sp.addNumber(9);
sp.addNumber(11);
try
{
sp.addNumber(110);
std::cout << "Container just accept some new values\n";
}
catch (const std::exception& e)
{
std::cerr << e.what() << '\n';
}
std::cout << "shortest span : "<< sp.shortestSpan() << std::endl;
std::cout << "longest span : " << sp.longestSpan() << std::endl;
std::cout << "\n======================Multiple nbr========================\n";
Span sp2 = Span(15);
sp2.addNumber(6);
sp2.addNumber(-3);
sp2.addNumber(17);
sp2.addNumber(9);
sp2.addNumber(11);
try
{
int intTab[] = {0,1,2,3,4,5,6,7,8,-9};
sp2.addRangeOfIterators(intTab, 10);
std::cout << "Container just accept some new values\n";
}
catch (const std::exception& e)
{
std::cerr << e.what() << '\n';
}
//bad
try
{
int intTab2[] = {0,1,2,3,4,5,6,7,8,-9};
sp2.addRangeOfIterators(intTab2, 10);
std::cout << "Container just accept some new values\n";
}
catch (const std::exception& e)
{
std::cerr << e.what() << '\n';
}
std::cout << "shortest span : "<< sp2.shortestSpan() << std::endl;
std::cout << "longest span : " << sp2.longestSpan() << std::endl;
std::cout << "\n======================Only one or two digit========================\n";
Span sp3 = Span(15);
std::cout << "----with zero digit----\n";
try
{
sp3.shortestSpan();
}
catch (const std::exception& e)
{
std::cerr << e.what() << '\n';
}
try
{
sp3.longestSpan();
}
catch (const std::exception& e)
{
std::cerr << e.what() << '\n';
}
std::cout << "----with one digit----\n";
sp3.addNumber(6);
try
{
sp3.shortestSpan();
}
catch (const std::exception& e)
{
std::cerr << e.what() << '\n';
}
try
{
sp3.longestSpan();
}
catch (const std::exception& e)
{
std::cerr << e.what() << '\n';
}
std::cout << "----with two digit----\n";
sp3.addNumber(6);
try
{
std::cout << "shortest span : "<< sp3.shortestSpan() << std::endl;
std::cout << "longest span : " << sp3.longestSpan() << std::endl;
}
catch (const std::exception& e)
{
std::cerr << e.what() << '\n';
}
return 0;
} }

View File

@ -0,0 +1,48 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* MutantStack.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/08/07 23:20:42 by apommier #+# #+# */
/* Updated: 2022/08/07 23:51:47 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include <algorithm>
#include <iostream>
#include <stack>
#include <list>
template<typename T>
class MutantStack : public std::stack<T>{
public :
MutantStack<T>(){}
MutantStack<T>( const MutantStack<T> &src )
{
*this = src;
}
~MutantStack<T>(){}
MutantStack<T> &operator=(const MutantStack<T> &rhs)
{
(void)rhs;
return *this;
}
typedef typename std::stack<T>::container_type::iterator iterator; //simplify name
iterator begin()
{
return this->c.begin(); //std::cbegin | std::begin
}
iterator end()
{
return this->c.end();
}
private :
};

View File

@ -0,0 +1,67 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* main.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/08/07 23:20:40 by apommier #+# #+# */
/* Updated: 2022/08/07 23:37:58 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "MutantStack.hpp"
int main_2()
{
std::list<int> mstack;
mstack.push_back(5);
mstack.push_back(17);
std::cout << mstack.back() << std::endl;
mstack.pop_back();
std::cout << mstack.size() << std::endl;
mstack.push_back(3);
mstack.push_back(5);
mstack.push_back(737);
//[...]
mstack.push_back(0);
std::list<int>::iterator it = mstack.begin();
std::list<int>::iterator ite = mstack.end();
++it;
--it;
while (it != ite)
{
std::cout << *it << std::endl;
++it;
}
std::list<int> s(mstack);
return (0);
}
int main()
{
MutantStack<int> mstack;
mstack.push(5);
mstack.push(17);
std::cout << mstack.top() << std::endl;
mstack.pop();
std::cout << mstack.size() << std::endl;
mstack.push(3);
mstack.push(5);
mstack.push(737);
//[...]
mstack.push(0);
MutantStack<int>::iterator it = mstack.begin();
MutantStack<int>::iterator ite = mstack.end();
++it;
--it;
while (it != ite)
{
std::cout << *it << std::endl;
++it;
}
std::stack<int> s(mstack);
std::cout << "\n====================LIST CONTAINER TURN====================\n";
main_2();
return (0);
}