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

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

18.04.2019, 20:30. Показов 3735. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2019, 20:30
Ответы с готовыми решениями:

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

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

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

5
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
18.04.2019, 21:42
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  [ТС]
вы бы не могли объяснить код?
для чего это
C++
1
2
class Range_error {};
* bool empty () const {return st.empty (); }
и как мне использовать это в main (то есть вывести)?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
18.04.2019, 22:10
Цитата Сообщение от will123456 Посмотреть сообщение
для чего это
это что бы не бросать исключение из метода peek(). Просто проверка пустой стек или нет.

Добавлено через 1 минуту
Цитата Сообщение от will123456 Посмотреть сообщение
то есть вывести
Всмысле распечатать?
1
4 / 1 / 1
Регистрация: 27.09.2018
Сообщений: 32
20.04.2019, 23:03  [ТС]
да распечатать
И как в main создать экземпляр этого класса?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
20.04.2019, 23:21
Лучший ответ Сообщение было отмечено 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.04.2019, 23:21
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru