класс контейнер стек с++

221
18 мая 2018, 17:40

Есть реализация класса контейнера с помощью двумерного массива,помогите пределать под стек,пожалуйста

class container : public base
{
public:
private:
    base*** array1;
   int order;
    int ni; int nj; //последний элемент
public:
    container(int ord) {
        ni = 0; nj = 0;
        order = ord;
        array1 = new base**[order];
        for (int i = 0; i < order; i++){
            array1[i] = new base*[order];
            for (int j = 0; j < order; j++){
                array1[i][j] = NULL;
            }
        }
    }
    ~container() {
        for (int i = 0; i < order; i++){
            if (array1[i]){
                delete[] array1[i];
            }
            delete[] array1;
            array1 = NULL;
            order = 0;
        }
    }
    bool Add(base *n){ //добавление элемента в конец
        array1[ni][nj] = n;
        if (nj != order - 1){
            nj++;
            return true;
        }
        else if (nj == order - 1 && ni != order - 1){
            nj = 0; ni++;
        }
        else if (nj == order - 1 && ni == order - 1){
            return false;
        }
        return false;
    }
    bool Equals(base* n){
        container* p = dynamic_cast<container*>(n);
        bool full = true;
    for (int i = 0; i < order; i++){
        for (int j = 0; j < order; j++){
            if (array1[i][j] != p->array1[i][j]){
                full = false;
                }
            }
        }
    return full;
    }
    void ToString(char* buffer);

    };
Answer 1
#include <string>
#ifndef DEFINE_TEMPLATE_STACK
#define DEFINE_TEMPLATE_STACK
template <typename T> class Stack
{
public:
    Stack(size_t s = 1024);
   ~Stack();
    class Exception
    {
        std::string message;
    public:
        Exception(const std::string& s = std::string() ) :
            message("Exception.")
        {
            message.append(s);
        }
    };
    class Badsize : public Exception
    {
    public:
        Badsize() : Exception("StackBadsize.") {}
    };
    class Underflow : public Exception
    {
    public:
        Underflow() : Exception("StackUnderflow.") {}
    };
    class Overflow : public Exception
    {
    public:
        Overflow() : Exception("StackOverflow.") {}
    };
    void Push(T);
    T Pop();
    size_t Length();
    size_t Total();
private:
    static const size_t max = 10000;
    T* value;
    size_t size, top;
};
template <typename T> Stack<T>::Stack(size_t s)
{
    value = 0;
    size = top = 0;
    if (s > max) throw Badsize();
    value = new T[s];
    size = s;
    top = 0;
}
template <typename T> Stack<T>::~Stack()
{
    delete[] value;
    value = 0;
    size = top = 0;
}
template <typename T> void Stack<T>::Push(T p)
{
    if (top == size) throw Overflow();
    value[top] = p;
    top++;
}
template <typename T> T Stack<T>::Pop()
{
    if (top == 0) throw Underflow();
    top--;
    return value[top];
}
inline template <typename T> size_t Stack<T>::Length()
{
    return size;
}
inline template <typename T> size_t Stack<T>::Total()
{
    return top;
}
#endif
READ ALSO
Что делает throw?

Что делает throw?

При выполнение данного кода произошло создание трех объектовЕсли происходит создание одного или двух - я могу понять логику

180
Мусор при сортировке

Мусор при сортировке

После сортировки в массиве NxN появляется мусор, с каждым разом мусор в разных местах

193
Проблема с transform-origin и transform: rotateX в Safari

Проблема с transform-origin и transform: rotateX в Safari

Столкнулся с проблемой, которая заключается в кривом отображении блока с текстом

218
Как расставить блоки по бокам ? (css)

Как расставить блоки по бокам ? (css)

Имеются 4 блокаУ каждого из них идентичный код, который приведен ниже

264