Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Стек - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функция вычисления корней квадратного уравнения http://www.cyberforum.ru/cpp-beginners/thread648920.html
Почему то корни не выводит...что не так? #include "iostream" #include "conio.h" #include "math.h" using namespace std; void root(float a,float b,float c,float &x1,float &x2) { float...
C++ Вычислить с заданной точностью значение функции вот такая задачка.. http://www.cyberforum.ru/cpp-beginners/thread648908.html
Ошибка в организации класса C++
Мои первые попытки написать консольную версию пошагового боя обвенчались неудачей в самом начале. При тестовых ударах в цикле for увидел что очки жизней персонажа не уменьшаются, тк кк задумывалось....
C++ Описать функцию, которая формирует список Common
В составе программы описать функцию, которая формирует список Common, включив в него элементы, которые входят одновременно в список М1 и М2. Помогите пожалуйста, ибо идей вообще нет, как это...
C++ Необходимо вернуть значение функции из Булевского значения и посчитать факториал http://www.cyberforum.ru/cpp-beginners/thread648875.html
Стоит задача- Написато программу которая спрашивает пользователя - Рост, вес, и возраст а затем выдаёт размер одежды по след. формулам: 1) Hat_size = вес/Рост*2.9; 2) Jacket_size = вес*Рост/288 и...
C++ Как работает итератор? for(vector<string>::iterator iter=vec1.begin();iter!=vec1.end();++iter) *iter=""; вот такой вот пример разбираю, первая строчка предельно ясна, но вот вторая.... понятно что обнуляет, но откуда... подробнее

Показать сообщение отдельно
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
09.09.2012, 17:22
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include <string>
#include <stdexcept>
 
template <typename T>
class Stack
{
public:
    typedef T value_type;
    Stack() : siz(0), cap(0) // конструктор
    {
        std::size_t initCap(2);
        p = new value_type[initCap];
        cap = initCap;
    }
    Stack(Stack const& st) : siz(0), cap(0) // конструктор копии
    {
        p = new value_type[st.cap];
        cap = st.cap;
        for(std::size_t i = 0; i < st.siz; ++i)
        {
            p[i] = st.p[i];
        }
        siz = st.siz;
    }
    Stack& operator=(Stack st)
    {
        Swap(st);
        return *this;
    }
    ~Stack()
    {
        delete[] p;
        p = 0;
    }
    void push(value_type const& val)
    {
        if(siz == cap) Deallocate();
        p[siz] = val;
        ++siz;
    }
    void pop()
    {
        if(siz)
        {
            (p + siz - 1)->~value_type();
            --siz;
        }
    }
    value_type& top()
    {
        if(siz) return p[siz - 1];
        else throw std::out_of_range("0 == siz");
    }
    value_type const& top() const
    {
        if(siz) return p[siz - 1];
        else throw std::out_of_range("0 == siz");
    }
    std::size_t size() const
    {
        return siz;
    }
    bool empty() const
    {
        return !siz;
    }
private:
    value_type* p;
    std::size_t siz, cap; // число элементов и вместимость
    void Swap(Stack& st) // используется в операторе присваивания
    {
        delete[] p;
        p = st.p;
        st.p = 0;
        siz = st.siz;
        cap = st.cap;
    }
    void Deallocate() // увеличивает вместимость стека в два раза если стек заполнен
    {
        std::size_t newCap = 2 * cap;
        value_type* pt = new value_type[newCap];
        for(std::size_t i = 0; i < siz; ++i)
        {
            pt[i] = p[i];
        }
        cap = newCap;
        delete[] p;
        p = pt;
        pt = 0;
    }
};
 
int main()
{
    Stack<std::string> st, st1;
    st.push("zero");
    st.push("temporary string");
    st.top() = "first string";
    st1 = st;
    st1.push("secong string");
    for(std::size_t i = 0; !st1.empty(); ++ i)
    {
        std::cout << "\nst1.size() is " << st1.size() << std::endl;
        std::cout << st1.top() << '\n';
        st1.pop();
    }
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru