mirror of https://github.com/xfarrow/lasd.git
Library 2
This commit is contained in:
parent
e079220d78
commit
15e341a6a0
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
#! /bin/bash
|
#! /bin/bash
|
||||||
|
|
||||||
g++ -O3 -o main \
|
g++ -g -O3 -o main \
|
||||||
zlasdtest/exercise1/simpletest.cpp zlasdtest/exercise1/fulltest.cpp \
|
zlasdtest/exercise1/simpletest.cpp zlasdtest/exercise1/fulltest.cpp \
|
||||||
zlasdtest/exercise2/simpletest.cpp zlasdtest/exercise2/fulltest.cpp \
|
zlasdtest/exercise2/simpletest.cpp zlasdtest/exercise2/fulltest.cpp \
|
||||||
zlasdtest/container/container.cpp \
|
zlasdtest/container/container.cpp \
|
||||||
|
|
|
@ -118,7 +118,6 @@ bool List<Data>::operator!=(const List<Data>& list) const noexcept{
|
||||||
tmp->next = head;
|
tmp->next = head;
|
||||||
head =tmp;
|
head =tmp;
|
||||||
size++;
|
size++;
|
||||||
|
|
||||||
if(size == 1){
|
if(size == 1){
|
||||||
tail = head;
|
tail = head;
|
||||||
}
|
}
|
||||||
|
@ -158,7 +157,7 @@ bool List<Data>::operator!=(const List<Data>& list) const noexcept{
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
Data List<Data>::FrontNRemove(){
|
Data List<Data>::FrontNRemove(){
|
||||||
if(head == nullptr){
|
if(head == nullptr){
|
||||||
throw std::length_error("List is empty!");
|
throw std::length_error("List is empty! (head=null)");
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
Data value = head->value;
|
Data value = head->value;
|
||||||
|
|
Binary file not shown.
|
@ -1,8 +1,16 @@
|
||||||
|
|
||||||
#include "zlasdtest/test.hpp"
|
#include "zlasdtest/test.hpp"
|
||||||
|
|
||||||
#include "zmytest/test.hpp"
|
#include "zmytest/test.hpp"
|
||||||
|
|
||||||
|
#include"container/container.hpp"
|
||||||
|
#include"list/list.hpp"
|
||||||
|
#include"vector/vector.hpp"
|
||||||
|
#include"queue/queue.hpp"
|
||||||
|
#include"queue/lst/queuelst.hpp"
|
||||||
|
#include"queue/vec/queuevec.hpp"
|
||||||
|
#include"stack/stack.hpp"
|
||||||
|
#include"stack/lst/stacklst.hpp"
|
||||||
|
#include"stack/vec/stackvec.hpp"
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@ -12,5 +20,6 @@
|
||||||
int main() {
|
int main() {
|
||||||
std::cout << "Lasd Libraries 2020" << std::endl;
|
std::cout << "Lasd Libraries 2020" << std::endl;
|
||||||
lasdtest(); // To call in the menu of your library test!
|
lasdtest(); // To call in the menu of your library test!
|
||||||
|
//menu();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,82 +3,87 @@ namespace lasd {
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
QueueLst(const LinearContainer<Data>& linear){
|
QueueLst<Data>::QueueLst(const LinearContainer<Data>& linear){
|
||||||
for(ulong i=0; i<linear.Size() ; ++i){
|
for(ulong i=0; i<linear.Size() ; ++i){
|
||||||
Enqueue(linear[i]);
|
Enqueue(linear[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
QueueLst(const QueueLst& copyFrom){
|
QueueLst<Data>::QueueLst(const QueueLst& copyFrom){
|
||||||
for(ulong i=0; i<copyFrom.Size() ; ++i){
|
for(ulong i=0; i<copyFrom.Size() ; ++i){
|
||||||
Enqueue(copyFrom[i]);
|
Enqueue(copyFrom[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
QueueLst(QueueLst&& moveFrom) noexcept{
|
QueueLst<Data>::QueueLst(QueueLst&& moveFrom) noexcept{
|
||||||
std::swap(head,moveFrom.head);
|
std::swap(head,moveFrom.head);
|
||||||
std::swap(tail,moveFrom.tail);
|
std::swap(tail,moveFrom.tail);
|
||||||
std::swap(size,moveFrom.size);
|
std::swap(size,moveFrom.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
~QueueLst(){
|
template <typename Data>
|
||||||
|
QueueLst<Data>::~QueueLst(){
|
||||||
Clear();
|
Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
QueueLst<Data>& operator=(const QueueLst& toCopy){
|
QueueLst<Data>& QueueLst<Data>::operator=(const QueueLst& toCopy){
|
||||||
QueueLst<Data>* tmp = new QueueLst<Data>(toCopy);
|
// QueueLst<Data>* tmp = new QueueLst<Data>(toCopy);
|
||||||
std::swap(*this, *tmp);
|
// std::swap(*this, *tmp);
|
||||||
delete tmp;
|
// delete tmp;
|
||||||
|
// return *this;
|
||||||
|
|
||||||
|
List<Data>::operator=(toCopy);
|
||||||
return *this;
|
return *this;
|
||||||
/*
|
|
||||||
List<Data>::operator=(copyFrom);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QueueLst& operator=(QueueLst&& toMove) noexcept{
|
template <typename Data>
|
||||||
if(*this != toMove){
|
QueueLst<Data>& QueueLst<Data>::operator=(QueueLst&& toMove) noexcept{
|
||||||
std::swap(head, toMove.head);
|
List<Data>::operator=(std::move(toMove));
|
||||||
std::swap(head, toMove.tail);
|
|
||||||
std::swap(size, toMove.size);
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const QueueLst& queuelist) const noexcept{
|
template <typename Data>
|
||||||
|
bool QueueLst<Data>::operator==(const QueueLst& queuelist) const noexcept{
|
||||||
return List<Data>::operator==(queuelist);
|
return List<Data>::operator==(queuelist);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const QueueLst& queuelist) const noexcept{
|
template <typename Data>
|
||||||
|
bool QueueLst<Data>::operator!=(const QueueLst& queuelist) const noexcept{
|
||||||
return List<Data>::operator!=(queuelist);
|
return List<Data>::operator!=(queuelist);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
void Enqueue(const Data& data){
|
void QueueLst<Data>::Enqueue(const Data& data){
|
||||||
List<Data>::InsertAtBack(data);
|
List<Data>::InsertAtBack(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
void Enqueue(Data&& data){
|
void QueueLst<Data>::Enqueue(Data&& data){
|
||||||
List<Data>::InsertAtBack(data);
|
List<Data>::InsertAtBack(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
Data& Head() const{
|
Data& QueueLst<Data>::Head() const{
|
||||||
return List<Data>::Front();
|
return List<Data>::Front();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
void Dequeue(){
|
void QueueLst<Data>::Dequeue(){
|
||||||
List<Data>::RemoveFromFront();
|
List<Data>::RemoveFromFront();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
Data HeadNDequeue(){
|
Data QueueLst<Data>::HeadNDequeue(){
|
||||||
return List<Data>::FrontNRemove();
|
return List<Data>::FrontNRemove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Data>
|
||||||
|
void QueueLst<Data>::Clear(){
|
||||||
|
List<Data>::Clear();
|
||||||
|
}
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,19 +11,19 @@ QueueVec<Data>::QueueVec(){
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
QueueVec(const LinearContainer<Data>& linear){
|
QueueVec<Data>::QueueVec(const LinearContainer<Data>& linear){
|
||||||
size = linear.Size();
|
size = linear.Size();
|
||||||
Elements = new Data[size+1]; //forse da espandere
|
Elements = new Data[size+1]; //forse da espandere
|
||||||
for(ulong i=0 ; i<linear.Size() ; ++i){
|
for(ulong i=0 ; i<linear.Size() ; ++i){
|
||||||
Elements[i] = linear[i];
|
Elements[i] = linear[i];
|
||||||
}
|
}
|
||||||
front = 0;
|
front = 0;
|
||||||
rear = size;
|
rear = size; // the vector will be full
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
QueueVec<Data>::QueueVec(const QueueVec& toCopy){
|
QueueVec<Data>::QueueVec(const QueueVec& toCopy){
|
||||||
size = toCopy.Size();
|
size = toCopy.size;
|
||||||
ulong index_of_the_element = toCopy.front , i=0;
|
ulong index_of_the_element = toCopy.front , i=0;
|
||||||
Elements = new Data[size];
|
Elements = new Data[size];
|
||||||
|
|
||||||
|
@ -33,11 +33,16 @@ QueueVec<Data>::QueueVec(const QueueVec& toCopy){
|
||||||
index_of_the_element = (index_of_the_element+1)%size;
|
index_of_the_element = (index_of_the_element+1)%size;
|
||||||
}
|
}
|
||||||
front = 0;
|
front = 0;
|
||||||
rear = toCopy.rear;
|
rear = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
QueueVec<Data>::QueueVec(QueueVec&& toMove) noexcept{
|
QueueVec<Data>::QueueVec(QueueVec&& toMove) noexcept{
|
||||||
|
/*
|
||||||
|
we initialize size=4 so the swapped vector won't be in an
|
||||||
|
inconsistent state (size=0 can never be accettable)
|
||||||
|
*/
|
||||||
|
size = 4;
|
||||||
std::swap(Elements, toMove.Elements);
|
std::swap(Elements, toMove.Elements);
|
||||||
std::swap(rear, toMove.rear);
|
std::swap(rear, toMove.rear);
|
||||||
std::swap(front, toMove.front);
|
std::swap(front, toMove.front);
|
||||||
|
@ -45,9 +50,8 @@ QueueVec<Data>::QueueVec(QueueVec&& toMove) noexcept{
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
virtual QueueVec<Data>::~QueueVec(){
|
QueueVec<Data>::~QueueVec(){
|
||||||
//vector destructor will be called
|
//vector destructor will be called automatically i hope
|
||||||
// TEST IT!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
|
@ -118,7 +122,7 @@ Data& QueueVec<Data>::Head() const{
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
void QueueVec<Data>::Dequeue(){
|
void QueueVec<Data>::Dequeue(){
|
||||||
if(Size() == 0){
|
if(Size() <= 0){
|
||||||
throw std::length_error("Queuevec is empty!");
|
throw std::length_error("Queuevec is empty!");
|
||||||
}
|
}
|
||||||
front = (front + 1) % size;
|
front = (front + 1) % size;
|
||||||
|
@ -140,13 +144,53 @@ bool QueueVec<Data>::Empty() const noexcept{
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
ulong Size() const noexcept{
|
ulong QueueVec<Data>::Size() const noexcept{
|
||||||
return ((rear + size) - front) % size;
|
return ((rear + size) - front) % size;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
void Clear(){
|
void QueueVec<Data>::Clear(){
|
||||||
|
if(size!=4){
|
||||||
|
delete[] Elements;
|
||||||
|
Elements = new Data[4];
|
||||||
|
size = 4;
|
||||||
|
}
|
||||||
|
front = 0;
|
||||||
|
rear = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Data>
|
||||||
|
void QueueVec<Data>::Expand(){
|
||||||
|
Data* tmp = new Data[size * 2];
|
||||||
|
ulong current_index = front , i=0;
|
||||||
|
while(current_index != rear){
|
||||||
|
tmp[i] = Elements[current_index];
|
||||||
|
current_index = (current_index+1)%size;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
delete[] Elements;
|
||||||
|
Elements = tmp;
|
||||||
|
front = 0;
|
||||||
|
rear = i;
|
||||||
|
size *= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Data>
|
||||||
|
void QueueVec<Data>::Reduce(){
|
||||||
|
if(size<=4) return; // we are not going to have vectors with less than 4 Elements
|
||||||
|
ulong newsize = (ulong)size/2;
|
||||||
|
Data* tmp = new Data[newsize];
|
||||||
|
ulong current_index = front , i=0;
|
||||||
|
while(i < newsize){
|
||||||
|
tmp[i] = Elements[current_index];
|
||||||
|
current_index = (current_index+1)%size;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
delete[] Elements;
|
||||||
|
Elements = tmp;
|
||||||
|
front = 0;
|
||||||
|
rear = i;
|
||||||
|
size *= 2;
|
||||||
}
|
}
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ private:
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
using Vector<Data>::Elements;
|
using Vector<Data>::Elements;
|
||||||
using Vector<Data>::size;
|
using Vector<Data>::size; // dimension of the array
|
||||||
ulong front = 0;
|
ulong front = 0;
|
||||||
ulong rear = 0;
|
ulong rear = 0;
|
||||||
|
|
||||||
|
@ -89,6 +89,7 @@ protected:
|
||||||
|
|
||||||
void Expand();
|
void Expand();
|
||||||
void Reduce();
|
void Reduce();
|
||||||
|
|
||||||
//void SwapVectors(arguments) specifiers;
|
//void SwapVectors(arguments) specifiers;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,8 +5,8 @@ namespace lasd {
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
StackLst(const LinearContainer<Data>& linear){
|
StackLst<Data>::StackLst(const LinearContainer<Data>& linear){
|
||||||
for(ulong i=linear.Size()-1 ; i>=0 ; --i){ // è possibile usare il costruttore di List?
|
for(long int i=(long int)linear.Size()-1 ; i>=0 ; --i){ // è possibile usare il costruttore di List?
|
||||||
Push(linear[i]);
|
Push(linear[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,9 @@ StackLst(const LinearContainer<Data>& linear) : List<Data>(linear){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
template <typename Data>
|
||||||
StackLst(const StackLst& stcklist){
|
StackLst<Data>::StackLst(const StackLst& stcklist){
|
||||||
for(ulong i=stcklist.Size()-1 ; i>=0 ; --i){
|
for(long int i=(long int)stcklist.Size()-1 ; i>=0 ; i--){
|
||||||
Push(stcklist[i]);
|
Push(stcklist[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,62 +35,67 @@ StackLst<Data>::StackLst(StackLst&& stcklist) noexcept{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
virtual ~StackLst(){
|
template <typename Data>
|
||||||
|
StackLst<Data>::~StackLst(){
|
||||||
Clear();
|
Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
StackLst& operator=(const StackLst& copyFrom){
|
template <typename Data>
|
||||||
|
StackLst<Data>& StackLst<Data>::operator=(const StackLst& copyFrom){
|
||||||
if(*this != copyFrom){
|
if(*this != copyFrom){
|
||||||
Clear();
|
Clear();
|
||||||
for(ulong i=copyFrom.Size()-1 ; i>=0 ; --i){
|
for(long int i=(long int)copyFrom.Size()-1 ; i>=0 ; --i){
|
||||||
Push(copyFrom[i]);
|
Push(copyFrom[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
StackLst& operator=(StackLst&& moveFrom){
|
template <typename Data>
|
||||||
|
StackLst<Data>& StackLst<Data>::operator=(StackLst&& moveFrom) noexcept{
|
||||||
std::swap(size, moveFrom.size);
|
std::swap(size, moveFrom.size);
|
||||||
std::swap(head, moveFrom.head);
|
std::swap(head, moveFrom.head);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const StackLst& stcklist) const noexcept{
|
template <typename Data>
|
||||||
|
bool StackLst<Data>::operator==(const StackLst& stcklist) const noexcept{
|
||||||
return List<Data>::operator==(stcklist);
|
return List<Data>::operator==(stcklist);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const StackLst& stcklist) const noexcept{
|
template <typename Data>
|
||||||
|
bool StackLst<Data>::operator!=(const StackLst& stcklist) const noexcept{
|
||||||
return List<Data>::operator!=(stcklist);
|
return List<Data>::operator!=(stcklist);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Specific member functions (inherited from Stack)
|
// Specific member functions (inherited from Stack)
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
void Push(const Data& element){
|
void StackLst<Data>::Push(const Data& element){
|
||||||
List<Data>::InsertAtFront(element);
|
List<Data>::InsertAtFront(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
void Push(Data&& element){
|
void StackLst<Data>::Push(Data&& element) noexcept{
|
||||||
List<Data>::InsertAtFront(element);
|
List<Data>::InsertAtFront(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
Data& Top() const{
|
Data& StackLst<Data>::Top() const{
|
||||||
return List<Data>::Front();
|
return List<Data>::Front();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
void Pop(){
|
void StackLst<Data>::Pop(){
|
||||||
List<Data>::RemoveFromFront();
|
List<Data>::RemoveFromFront();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
Data TopNPop(){
|
Data StackLst<Data>::TopNPop(){
|
||||||
return List<Data>::FrontNRemove();
|
return List<Data>::FrontNRemove();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
void Clear(){
|
void StackLst<Data>::Clear(){
|
||||||
List<Data>::Clear();
|
List<Data>::Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ namespace lasd {
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
StackVec<Data>::StackVec(){
|
StackVec<Data>::StackVec(){
|
||||||
size = 4; // default vector is instantiated with 4 cells
|
size = 4; // default vector is instantiated with 4 cells
|
||||||
|
stackSize = 0;
|
||||||
Elements = new Data[size];
|
Elements = new Data[size];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,12 +22,12 @@ StackVec<Data>::StackVec(const LinearContainer<Data>& linear){ // si può richia
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
StackVec<Data>::StackVec(const StackVec& stckvec){// si può richiamare il costruttore della classe Vector
|
StackVec<Data>::StackVec(const StackVec& stckvec){// si può richiamare il costruttore della classe Vector
|
||||||
Elements = new Data[stckvec.Size()]; // espandere di un po' forse
|
Elements = new Data[stckvec.size]; // espandere di un po' forse
|
||||||
for(ulong i=0 ; i<stckvec.Size() ; ++i){
|
for(ulong i=0 ; i<stckvec.size ; ++i){
|
||||||
Elements[i] = stckvec[i];
|
Elements[i] = stckvec[i];
|
||||||
}
|
}
|
||||||
size = stckvec.Size();
|
size = stckvec.size;
|
||||||
stackSize = stckvec.stackSize;
|
stackSize = stckvec.Size();
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
StackVec(const StackVec& stckvec) : Vector<Data>(copyFrom)
|
StackVec(const StackVec& stckvec) : Vector<Data>(copyFrom)
|
||||||
|
@ -39,32 +40,42 @@ StackVec<Data>::StackVec(StackVec&& toMove) noexcept{
|
||||||
std::swap(stackSize, toMove.stackSize);
|
std::swap(stackSize, toMove.stackSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Data>
|
||||||
StackVec<Data>::~StackVec(){
|
StackVec<Data>::~StackVec(){
|
||||||
// Vector destructor will be called automatically
|
// Vector destructor will be called automatically
|
||||||
// (TEST IT)
|
// (TEST IT)
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
StackVec& StackVec<Data>::operator=(const StackVec& copyFrom){
|
StackVec<Data>& StackVec<Data>::operator=(const StackVec<Data>& copyFrom){
|
||||||
Vector<Data>::operator=(copyFrom); // espandere di un po' forse
|
Vector<Data>::operator=(copyFrom); // espandere di un po' forse
|
||||||
stackSize = copyFrom.Size();
|
stackSize = copyFrom.Size();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
StackVec& StackVec<Data>::operator=(StackVec&& moveFrom) noexcept{
|
StackVec<Data>& StackVec<Data>::operator=(StackVec<Data>&& moveFrom) noexcept{
|
||||||
Vector<Data>::operator=(std::move(moveFrom)); // espandere di un po' forse
|
Vector<Data>::operator=(std::move(moveFrom)); // espandere di un po' forse
|
||||||
stackSize = copyFrom.Size();
|
stackSize = moveFrom.Size();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
bool StackVec<Data>::operator==(const StackVec& toCompare) const noexcept{
|
bool StackVec<Data>::operator==(const StackVec<Data>& toCompare) const noexcept{
|
||||||
Vector<Data>::operator==(toCompare);
|
if(stackSize == toCompare.Size()){
|
||||||
|
for(ulong i=0 ; i<stackSize ; ++i){
|
||||||
|
if(Elements[i] != toCompare[i]){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
bool StackVec<Data>::operator!=(const StackVec& toCompare) const noexcept{
|
bool StackVec<Data>::operator!=(const StackVec<Data>& toCompare) const noexcept{
|
||||||
Vector<Data>::operator!=(toCompare);
|
return !(*this == toCompare);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Specific member functions (inherited from Stack)
|
// Specific member functions (inherited from Stack)
|
||||||
|
@ -83,20 +94,21 @@ void StackVec<Data>::Push(Data&& data){
|
||||||
Expand();
|
Expand();
|
||||||
}
|
}
|
||||||
std::swap(Elements[stackSize], data);
|
std::swap(Elements[stackSize], data);
|
||||||
|
++stackSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
Data& StackVec<Data>::Top() const{
|
Data& StackVec<Data>::Top() const{
|
||||||
if(stackSize == 0){
|
if(stackSize == 0){
|
||||||
throw std::length_error("Empty Stack!");
|
throw std::length_error("Empty Stack! (TOP)");
|
||||||
}
|
}
|
||||||
return Elements[stackSize-1]
|
return Elements[stackSize-1];
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Data>
|
template <typename Data>
|
||||||
void StackVec<Data>::Pop(){
|
void StackVec<Data>::Pop(){
|
||||||
if(stackSize<=0){
|
if(stackSize==0){
|
||||||
throw std::length_error("Empty Stack!");
|
throw std::length_error("Empty Stack! (POP)");
|
||||||
}
|
}
|
||||||
--stackSize;
|
--stackSize;
|
||||||
if(stackSize < (int)(size/4)){
|
if(stackSize < (int)(size/4)){
|
||||||
|
@ -131,6 +143,13 @@ void StackVec<Data>::Reduce(){
|
||||||
Vector<Data>::Resize((ulong)size/2);
|
Vector<Data>::Resize((ulong)size/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Data>
|
||||||
|
void StackVec<Data>::Clear(){
|
||||||
|
delete [] Elements;
|
||||||
|
size = 4;
|
||||||
|
stackSize = 0;
|
||||||
|
Elements = new Data[size];
|
||||||
|
}
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ protected:
|
||||||
|
|
||||||
ulong stackSize = 0; // first empty cell
|
ulong stackSize = 0; // first empty cell
|
||||||
using Vector<Data>::Elements;
|
using Vector<Data>::Elements;
|
||||||
using Vector<Data>::size;
|
using Vector<Data>::size; // dimension of the vector
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -13,7 +13,7 @@ using namespace std;
|
||||||
|
|
||||||
void lasdtest() {
|
void lasdtest() {
|
||||||
cout << endl << "~*~#~*~ Welcome to the LASD Test Suite ~*~#~*~ " << endl;
|
cout << endl << "~*~#~*~ Welcome to the LASD Test Suite ~*~#~*~ " << endl;
|
||||||
testSimpleExercise1();
|
//testSimpleExercise1();
|
||||||
testFullExercise1();
|
testFullExercise1();
|
||||||
testSimpleExercise2();
|
testSimpleExercise2();
|
||||||
testFullExercise2();
|
testFullExercise2();
|
||||||
|
|
|
@ -1,2 +1,49 @@
|
||||||
|
#include"test.hpp"
|
||||||
|
#include<iostream>
|
||||||
|
#include<random>
|
||||||
|
#include "../zlasdtest/test.hpp"
|
||||||
|
using namespace lasd;
|
||||||
|
|
||||||
// ...
|
void menu(){
|
||||||
|
/*
|
||||||
|
QueueVec<int> q1;
|
||||||
|
q1.Enqueue(4);
|
||||||
|
q1.Enqueue(0);
|
||||||
|
q1.Enqueue(3);
|
||||||
|
q1.Enqueue(1);
|
||||||
|
q1.Enqueue(2);
|
||||||
|
q1.HeadNDequeue();
|
||||||
|
q1.Enqueue(5);
|
||||||
|
|
||||||
|
QueueVec<int> q2;
|
||||||
|
q2 = std::move(q1);
|
||||||
|
|
||||||
|
QueueVec<int> q3(std::move(q1));
|
||||||
|
std::cout<<q1.Head();
|
||||||
|
*/
|
||||||
|
QueueLst<int> q1;
|
||||||
|
q1.Enqueue(4);
|
||||||
|
q1.Enqueue(0);
|
||||||
|
q1.Enqueue(3);
|
||||||
|
q1.Enqueue(1);
|
||||||
|
q1.Enqueue(2);
|
||||||
|
|
||||||
|
// QueueLst<int>* tmp = new QueueLst<int>(q1);
|
||||||
|
// (*tmp).HeadNDequeue();
|
||||||
|
// (*tmp).HeadNDequeue();
|
||||||
|
// (*tmp).HeadNDequeue();
|
||||||
|
// (*tmp).HeadNDequeue();
|
||||||
|
// (*tmp).HeadNDequeue();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
QueueLst<int> q2;
|
||||||
|
q2 = std::move(q1);
|
||||||
|
|
||||||
|
q2.HeadNDequeue();
|
||||||
|
q2.HeadNDequeue();
|
||||||
|
q2.HeadNDequeue();
|
||||||
|
q2.HeadNDequeue();
|
||||||
|
q2.HeadNDequeue();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -1,11 +1,19 @@
|
||||||
|
|
||||||
#ifndef MYTEST_HPP
|
#ifndef MYTEST_HPP
|
||||||
#define MYTEST_HPP
|
#define MYTEST_HPP
|
||||||
|
#include<iostream>
|
||||||
|
#include"../vector/vector.hpp"
|
||||||
|
#include"../list/list.hpp"
|
||||||
|
#include"../queue/queue.hpp"
|
||||||
|
#include"../queue/lst/queuelst.hpp"
|
||||||
|
#include"../queue/vec/queuevec.hpp"
|
||||||
|
#include"../stack/stack.hpp"
|
||||||
|
#include"../stack/lst/stacklst.hpp"
|
||||||
|
#include"../stack/vec/stackvec.hpp"
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
// ...
|
void menu();
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
#include"test.cpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,13 @@
|
||||||
|
#include<iostream>
|
||||||
|
using namespace std;
|
||||||
|
ulong Size(){
|
||||||
|
ulong a = 6;
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
ulong j = Size();
|
||||||
|
cout<<j<<endl;
|
||||||
|
for(long int x=(long int)Size() ; x>=0 ; --x){
|
||||||
|
cout<<x<<endl;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue