Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
4 / 1 / 1
Регистрация: 27.09.2018
Сообщений: 32
1

Написать шаблон класса на основе класса vector для реализации стековой структуры данных

18.04.2019, 20:30. Показов 1615. Ответов 5
Метки нет (Все метки)

Пыталась написать код, но не уверена будет ли такая реализация корректной, можно ли это сделать как-то по - другому?
И как надо реализовать копирования стека? Помогите разобраться с этим пожалуйста.

Написать шаблон класса, который использует шаблонный класс vector
для реализации стековой структуры данных. Продемонстрировать операции занесения
элемента в стек, извлечение элемента из стека, копирование стека, вывод
содержимого стека.
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
#include "pch.h"
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
template <typename T>
class Stack{
private:
    T *stackPtr;                      
    int top;
    const int size;                 
    vector<int> data_;
public:
    Stack(int maxSize) :size(maxSize) {
        stackPtr = new T[size];
        top = 0; 
    }
    Stack(const Stack<T> &);
    ~Stack() {
        delete[] stackPtr;
    }
 
    
    void push(int val);
    void pop(int& val);
    void print(); 
 
};
 
template <typename T>
Stack<T>::Stack(const Stack<T> & otherStack) :
    size(otherStack.data_.size()) {
    stackPtr = new T[size]; 
    top = otherStack.top;
 
    for (int i = 0; i < top; i++)
        stackPtr[i] = otherStack.stackPtr+[i];
}
template <typename T>
 void Stack<T>::push(int val){
    data_.push_back(val);
}
 
template <typename T>
 void Stack<T>::pop(int& val){
 
     data_.pop_back();
}
 
template <typename T>
 void Stack<T>::print(){
     cout << "[";
     for (int i = data_.size() - 1; i >= 0; i--)
         cout << data_[i] << " ";
     cout << "]";
}
 
 
int main(){
 
    int number_elements1;
    cout << "Enter the number of elements in the list: ";
    cin >> number_elements1;
    Stack<int> stack1(number_elements1);
    int s1;
    for (int i =0; i <= number_elements1 - 1; i++) {
        cin >> s1;
        stack1.push(s1); 
    }
    stack1.pop(s1);
    stack1.pop(s1);
    cout << endl;
    cout << "steck: ";
    stack1.print(); 
    cout <<endl;
 
    
    
    system("pause");
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2019, 20:30
Ответы с готовыми решениями:

Разработать шаблон класса структуры данных
Доброго времени суток! Помогите кто чем может, кто советом, кто кодом, вообщем вот что требуется: ...

Разработать шаблон класса для реализации односвязного списка
Помогите пожалуйста разработать шаблон класса для реализации односвязного списка.

Отсутствует список аргументов для шаблон класса std::vector
Есть функция: LoadFBX(std::vector* pOutVertexVector); на загрузку модели формата FBX в DX. На...

Спроектировать шаблон класса spisok для реализации односвязного линейного списка. Не работает сортировка
Здравствуйте! Очень нужна помощь в реализации программы. Задание: Спроектировать шаблон класса...

5
4339 / 2397 / 995
Регистрация: 07.02.2019
Сообщений: 6,288
18.04.2019, 21:42 2
will123456,
C++
1
2
3
4
5
6
7
8
9
10
11
class Range_error {};
 
template<class T> class Stack
{
    std::vector<T> st;
public:
    void push(const T& val) { st.push_back(val); }
    void pop() { if (!st.empty()) st.pop_back(); }
    const T& peek() const { if (!st.empty()) return st.back(); throw Range_error(); }
    bool empty() const { return st.empty(); }
};
1
4 / 1 / 1
Регистрация: 27.09.2018
Сообщений: 32
18.04.2019, 21:54  [ТС] 3
вы бы не могли объяснить код?
для чего это
C++
1
2
class Range_error {};
* bool empty () const {return st.empty (); }
и как мне использовать это в main (то есть вывести)?
0
4339 / 2397 / 995
Регистрация: 07.02.2019
Сообщений: 6,288
18.04.2019, 22:10 4
Цитата Сообщение от will123456 Посмотреть сообщение
для чего это
это что бы не бросать исключение из метода peek(). Просто проверка пустой стек или нет.

Добавлено через 1 минуту
Цитата Сообщение от will123456 Посмотреть сообщение
то есть вывести
Всмысле распечатать?
1
4 / 1 / 1
Регистрация: 27.09.2018
Сообщений: 32
20.04.2019, 23:03  [ТС] 5
да распечатать
И как в main создать экземпляр этого класса?
0
4339 / 2397 / 995
Регистрация: 07.02.2019
Сообщений: 6,288
20.04.2019, 23:21 6
Лучший ответ Сообщение было отмечено will123456 как решение

Решение

will123456,
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
#include <iostream>
#include <vector>
 
class Range_error {};
 
template<class T> class Stack
{
    std::vector<T> st;
public:
    void push(const T& val) { st.push_back(val); }
    void pop() { if (!st.empty()) st.pop_back(); }
    const T& peek() const { if (!st.empty()) return st.back(); throw Range_error(); }
    bool empty() const { return st.empty(); }
 
    typedef std::vector<int>::const_iterator iter;
    iter begin() const { return st.cbegin(); }
    iter end() const { return st.cend(); }
};
 
int main()
{
    Stack<int> s;
    for (int i = 0; i < 10; ++i)
        s.push(i);
 
    for (auto p : s) std::cout << p << ' ';
}
Добавлено через 10 минут
will123456, только на время тестирования вашего кода оберните его в try, если все ОК, уберете потом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
    try
    {
        //ваш код
    }
    catch (Range_error)
    {
        std::cerr << "ошибка доступа: стек пуст\n";
    }
    catch (...)
    {
        std::cerr << "oops, something wrong";
    }
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2019, 23:21

Шаблон класса vector
Народ, кто может помочь Ситуация такая - я изучаю С++ по книге Дейтлов, до настоящего момента...

Написать код программы для реализации класса human
Написать код программы для реализации класса human с атрибутами класса имя и возраст и методами...

На основе класса Vector разработать класс Matrix
На основе класса Vector разработать класс Matrix (матрица, физически представляющая собой вектор,...

Реализовать шаблон класса vector, реализующий динамический массив
Реализовать шаблон класса vector, реализующий динамический массив. Определить 2 объекта класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.