Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 5

Как создать стек объектов произвольного типа?

03.03.2017, 22:07. Показов 5328. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Предметная область: «Стек объектов произвольного типа».
Данные класса: динамический список элементов стека.
Функции класса: считывание без извлечения элемента стека, считывание с извлечением элемента стека, запись элемента в стек.

Это я так понял надо с template работать. А вот как реализовать стек объектов...я хрен знает. Кто подскажет хоть что то полезное?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2017, 22:07
Ответы с готовыми решениями:

Стек объектов произвольного типа (ООП)
Здравствуйте, у меня есть задание - реализовать стек объектов произвольного типа. В указаниях описано, что данные класса - это...

Стек объектов произвольного типа (ООП)
Здравствуйте, мне дали задание реализовать стек объектов произвольного типа с помощью ООП, и к тому же реализовать все эти сущности в виде...

Реализовать класс GenericLIFO для произвольного типа данных (стек LIFO)
Реализовать класс GenericLIFO представляющий коллекцию переменного размера для произвольного типа данных(стек LIFO). Реализовать методы ...

3
 Аватар для Armatus
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
04.03.2017, 03:22
Создать шаблонный класс Stack который внутри себя ( в private или protected ) имеет динамический массив ( хотя можно и статический ) и который в public имеет методы работы с данным массивом которые выполняют функции стека. Что такое шаблонный класс как и что такое стек можно погуглить.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
04.03.2017, 09:34
Много разных способов.
1. Например, создать стек указателей void *. Так поступали в С.
2. Создать класс-шаблон стека. Так сейчас поступают в С++.
Тогда можно будет объявлять стеки с разными типами объектов.
3. Создать базовый класс Object. Реализовать класс стека с элементами типа Object.
В такой стек можно букет положить объект любого наследника от класса Object.
Так делали в С++ до шаблонов.
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
04.03.2017, 09:57
ruskryzhanovski, неужели нельзя в гугле набрать "реализация стека на c++"? Или это так трудно? Я вот набрал, я сразу выдало, то что нужно тебе, даже писать самому не пришлось:
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
110
111
112
113
114
115
116
117
118
119
#ifndef STACK_H
#define STACK_H
 
#include <cassert> // для assert
#include <iostream>
 
#include <iomanip> // для setw
 
template <typename T>
class Stack
{
private:
    T *stackPtr;                      // указатель на стек
    const int size;                   // максимальное количество элементов в стеке
    int top;                          // номер текущего элемента стека
public:
    Stack(int = 10);                  // по умолчанию размер стека равен 10 элементам
    Stack(const Stack<T> &);          // конструктор копирования
    ~Stack();                         // деструктор
 
    inline void push(const T & );     // поместить элемент в вершину стека
    inline T pop();                   // удалить элемент из вершины стека и вернуть его
    inline void printStack();         // вывод стека на экран
    inline const T &Peek(int ) const; // n-й элемент от вершины стека
    inline int getStackSize() const;  // получить размер стека
    inline T *getPtr() const;         // получить указатель на стек
    inline int getTop() const;        // получить номер текущего элемента в стеке
};
 
// реализация методов шаблона класса STack
 
// конструктор Стека
template <typename T>
Stack<T>::Stack(int maxSize) :
    size(maxSize) // инициализация константы
{
    stackPtr = new T[size]; // выделить память под стек
    top = 0; // инициализируем текущий элемент нулем;
}
 
// конструктор копирования
template <typename T>
Stack<T>::Stack(const Stack<T> & otherStack) :
    size(otherStack.getStackSize()) // инициализация константы
{
    stackPtr = new T[size]; // выделить память под новый стек
    top = otherStack.getTop();
 
    for(int ix = 0; ix < top; ix++)
        stackPtr[ix] = otherStack.getPtr()[ix];
}
 
// функция деструктора Стека
template <typename T>
Stack<T>::~Stack()
{
    delete [] stackPtr; // удаляем стек
}
 
// функция добавления элемента в стек
template <typename T>
inline void Stack<T>::push(const T &value)
{
    // проверяем размер стека
    assert(top < size); // номер текущего элемента должен быть меньше размера стека
 
    stackPtr[top++] = value; // помещаем элемент в стек
}
 
// функция удаления элемента из стека
template <typename T>
inline T Stack<T>::pop()
{
    // проверяем размер стека
    assert(top > 0); // номер текущего элемента должен быть больше 0
 
    stackPtr[--top]; // удаляем элемент из стека
}
 
// функция возвращает n-й элемент от вершины стека
template <class T>
inline const T &Stack<T>::Peek(int nom) const
{
  //
  assert(nom <= top);
 
  return stackPtr[top - nom]; // вернуть n-й элемент стека
}
 
// вывод стека на экран
template <typename T>
inline void Stack<T>::printStack()
{
    for (int ix = top - 1; ix >= 0; ix--)
        cout << "|" << setw(4) << stackPtr[ix] << endl;
}
 
// вернуть размер стека
template <typename T>
inline int Stack<T>::getStackSize() const
{
    return size;
}
 
// вернуть указатель на стек (для конструктора копирования)
template <typename T>
inline T *Stack<T>::getPtr() const
{
    return stackPtr;
}
 
// вернуть размер стека
template <typename T>
inline int Stack<T>::getTop() const
{
    return top;
}
 
#endif // STACK_H
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.03.2017, 09:57
Помогаю со студенческими работами здесь

Стек и очередь для хранения объектов типа Coord
Ниже представлен пример класса Coord. Напишите программу для хранения объектов типа Coord, используя последовательные контейнеры стека и...

Как создать массив объектов собственного типа
Как создать массив, в котором в одном элементу arr будут хранится данные собственного типа name(string), ID(int), song(string)

Как создать массивы объектов типа void
Знаю, что такой массив возможно создать, но не могу понять как. Не подскажите? Добавлено через 9 минут Работает для обертки. Void...

Обобщенный класс, реализующий "стек с приоритетом", хранящий значения произвольного типа
Помогите, пожалуйста, решить задачу на языке C#: Необходимо написать обобщённый класс Priority Stack, реализующий стек с приоритетом,...

Создать стек из произвольного числа строк и удалить из него все слова, содержащии абревиатуру BY
Создать стек из произвольного числа строк и удалить из него все слова, содержащии абревиатуру BY.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru