ultimatum424 / OOP

0 stars 0 forks source link

Замечания по стеку строк #8

Open alexey-malov opened 7 years ago

alexey-malov commented 7 years ago
class CStringStack
{
public:
    CStringStack();
    ~CStringStack();

    void push(const std::string& value);
    void pop();
    std::string get() const;
    bool isEmpty() const;
private:

    std::unique_ptr<StackElement> last_data;
};
alexey-malov commented 7 years ago
    BOOST_AUTO_TEST_CASE(testing_for_many_push_and_pop)
    {
        for (size_t i = 0; i < 100000; i++)
        {
            stringStack.Push("qwerty");
        }
        BOOST_CHECK(stringStack.IsEmpty() != true);
        for (size_t i = 0; i < 100000; i++)
        {
            stringStack.Pop();
        }
        BOOST_CHECK(stringStack.IsEmpty() == true);
    }
alexey-malov commented 7 years ago
alexey-malov commented 7 years ago
        last_data = std::unique_ptr<StackElement>(new StackElement());
alexey-malov commented 7 years ago
void CStringStack::push(const std::string & value)
{
    if (last_data == NULL)
    {
        last_data = std::unique_ptr<StackElement>(new StackElement());
        last_data->string = value;
        last_data->ptr = NULL;
    }
    else
    {
        std::unique_ptr<StackElement> p(new StackElement());
        p->ptr = std::move(last_data);
        p->string = value; // если выброчится исключение, то стек окажется пустым
        last_data = std::move(p);
    }   
}
alexey-malov commented 7 years ago
void CStringStack::pop()
{
    if (!isEmpty())
    {
        auto p = std::make_unique<StackElement>;
        last_data = std::move(last_data->ptr);
    }
    else
    {
        throw std::exception("Stack is empty");
    }

}
alexey-malov commented 7 years ago
alexey-malov commented 7 years ago
alexey-malov commented 7 years ago
alexey-malov commented 7 years ago