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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dark Byte
-17 / 46 / 12
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
#1

Не типизированный стек - C++

26.11.2014, 09:07. Просмотров 193. Ответов 5
Метки нет (Все метки)

еще один эксперимент в духе хз зачем написал и где это может пригодится
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
class Stack
{
private:
    struct Node
    {
        Node* prev = nullptr;
        unsigned char* data = nullptr;
    } *last = nullptr;
 
public:
    Stack() {}
 
    ~Stack()
    {
        while (last) pop();
    }
 
    template<typename T>
    void push(const T &data)
    {
        static_assert(!std::is_pointer<T>::value, "Type should not be a pointer");
        Node* tmp = new Node;
        tmp->prev = last;
        T* ptr = new T;
        *ptr = data;
        tmp->data = (unsigned char*) ptr;
        last = tmp;
    }
 
    void pop()
    {
        if (!last) return;
        delete last->data;
        Node* tmp = last->prev;
        delete last;
        last = tmp;
    }
 
    template<typename T>
    const T& peek() const
    {
        if (!last) throw("Stack is empty");
        return *((T*) last->data);
    }
};
Добавлено через 6 минут
з.ы. только надо четко указывать при вызове Peek какой тип хочешь получить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2014, 09:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не типизированный стек (C++):

как в с++ создается типизированный файл? и как вообще понять типизированный? - C++
вопрос в теме

Используя стек, описать функцию проверяющую, является ли стек пустым - C++
Используя стек, описать функцию проверяющую, является ли стек пустым

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами - C++
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? - C++
Есть у меня пробелы в познаниях, хотел бы их устранить. 1. Что такое стек в самом языке С++ ? 2. В какой памяти он хранится и почему...

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"? - C++
Сабж g++ 4.5.0

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...) - C++
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то делал,или встречался с таким заданием: ...

5
0x10
2465 / 1637 / 241
Регистрация: 24.11.2012
Сообщений: 4,041
26.11.2014, 09:07 #2
Цитата Сообщение от Dark Byte Посмотреть сообщение
Не типизированный
Цитата Сообщение от Dark Byte Посмотреть сообщение
unsigned char* data
Цитата Сообщение от Dark Byte Посмотреть сообщение
static_assert(!std::is_pointer<T>::value, "Type should not be a pointer");
Серьезно?
0
Dark Byte
-17 / 46 / 12
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
26.11.2014, 09:10  [ТС] #3
Цитата Сообщение от 0x10 Посмотреть сообщение
Серьезно?
а что? ну имелось ввиду что добавлять можно значения любых типов
0
0x10
2465 / 1637 / 241
Регистрация: 24.11.2012
Сообщений: 4,041
26.11.2014, 09:19 #4
Цитата Сообщение от Dark Byte Посмотреть сообщение
а что?
См стандартный std::vector.
0
Dark Byte
-17 / 46 / 12
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
26.11.2014, 09:26  [ТС] #5
Цитата Сообщение от 0x10 Посмотреть сообщение
См стандартный std::vector.
вектор не умеет добавлять значения всех типов, только одного выбранного при объявлении...
0
0x10
2465 / 1637 / 241
Регистрация: 24.11.2012
Сообщений: 4,041
26.11.2014, 09:35 #6
Цитата Сообщение от Dark Byte Посмотреть сообщение
вектор не умеет добавлять значения всех типов, только одного
Повод задуматься: а нужен ли контейнер, хранящий никак не связанные между собой типы?
Если все-таки да, то обертка - это уже другая часть функционала. См boost::any.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2014, 09:35
Привет! Вот еще темы с ответами:

Типизированный файл - C++
С чего начать и что почитать?

не типизированный файл - C++
Дан текстовый файл f. Переписать в файл g все компоненты файла f с заменой в них символа 0 на 1 и наоборот. также решить в терминах...

Сформировать типизированный файл - C++
Сформировать типизированный файл, в котором хранится информация о сотрудниках подразделения: ФИО, место рождения, год рождения. На его...

Бинарное дерево в типизированный файл - C++
Задача над которой бьюсь уже третий день. 1. Сделать базу данных клиентов банка на основе бинарного дерева дерева Сделать...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
26.11.2014, 09:35
Ответ Создать тему
Опции темы

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