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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Нарушения прав доступа при чтении http://www.cyberforum.ru/cpp-beginners/thread1695022.html
Всем доброй ночи! Пишу курсовую и появилась проблема: нарушения прав доступа при чтении. Проверил отладчиком и нашел где ошибка, но в чем она заключается так и не понял. Подскажите, пожалуйста. Вот код(2 класса): #include "StdAfx.h" #include "Bank.h" Bank::Bank(void) : name(_T("")) , capital(0) , bankomat(false)
C++ В матрице заменить заданные строку и столбец нулями В данной матрицы A (N , N ) заменить k - ю строчку и р - первый столбец нулями , кроме элемента , что находится на их пересечении . N = 5 . Номера столбца и строки вводятся с клавиатуры.с кодом пожалуйста http://www.cyberforum.ru/cpp-beginners/thread1695021.html
C++ Явный метод Адамса для систем ОДУ
Нужно решить систему ОДУ явным методом Адамса 4-го порядка. Не могу придумать, как реализовать этот метод именно для системы. Может кто-нибудь может помочь или подсказать? #include <iostream> #include "math.h" using namespace std;
C++ Создать программу, которая позволяет читать по строкам текстовые файлы C++
1. Создать программу, которая позволяет с помощью потоковых библиотек ввода / вывода (библиотеки iostream и др.) Считывать по строкам текстовые файлы, сохранять считанные строки в оперативной памяти, модифицировать их и выводить на экран. 2. Дополнить программу возможностью выбора пользователем любого текстового файла с текущей директории. 3. С помощью потокового ввода / вывода выводить на...
C++ Объяснить, что происходит в данном фрагменте кода (матрицы) http://www.cyberforum.ru/cpp-beginners/thread1694983.html
Вообщем столкнулся с первой проблемой в изучении данного языка (с++). Мой мозг просто отказывается понимать вот эти строчки и их результат. int j, dd; //двухмерный массив for (i = 0; i < 4; i++) for (j = 0; j < 6; j++)dd = i + j + 12; // расчет элементов cout << "\n "; for (j = 0; j < 6; j++)cout << " " << j; for (i = 0; i < 4; i++) { cout << "\n " << i; for (j = 0; j < 6;...
 

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
26.03.2016, 11:27     Как реализовать стек, хранящий разные типы данных одновременно?
Цитата Сообщение от ChadloveMary Посмотреть сообщение
lemegeton, можно, пожалуйста, поподробнее.
Я так понимаю, что вам нужен просто код, который реализует некий стек. Не обязательно ходить вокруг да около. Это выглядит нелепо. Честнее просто попросить. Да, иногда бывает вместо ответа язвительный комментарий, но в подавляющем большинстве случаев вы получите свой код.

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

Ну вот вам стек чего угодно. В комментарии нормальная работа с таким стеком, после комментария -- как вы просите -- с разными типами данных в одном флаконе.

Написан на коленке, без контроля ошибок, конструктора копирования, оператора присваивания и т.д. и т.п. Зато сразу с итератором.
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
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <iostream>
 
template<class T>
class Stack {
 private:
  struct Node {
    T data;
    Node *prev;  
    Node(const T &data, Node *prev) : data(data), prev(prev) {}
  };
 
  int size;
  Node *head;
 public:
  class Iterator {
   public:
    Iterator(Node *node) : node(node) {}
    Iterator &operator++(int) {
      node = node->prev;
      return *this;
    }
    Iterator operator++() {
      Iterator result = Iterator(node);
      node = node->prev;
      return result;
    }
    const T &operator*() {
      return node->data;
    }
    bool operator!=(const Iterator &o) {
      return node != o.node;
    }
   private:
    Node *node;
  };
 
  Stack() : size(0), head(0) {}
  ~Stack() {
    clear();
  }
  const T &peek() const {
    return head.data;
  }
  T pop() {
    T data = head->data;
    Node *first = head;
    head = first->prev;
    delete first;
    size--;
    return data;
  }
  void push(const T &data) {
    size++;
    head = new Node(data, head);
  }
  int getSize() const {
    return size;
  }
  void clear() {
    while (size > 0) {
      pop();
    }
  }
  Iterator begin() {
    return Iterator(head);
  }
  Iterator end() {
    return Iterator(0);
  }
};
 
int main(int, char**) {
/*
  // так правильно
  Stack<int> stack;
  stack.push(1);
  stack.push(2);
  stack.push(3);
  std::cout << "Size: " << stack.getSize() << std::endl;
 
  for (Stack<int>::Iterator i = stack.begin(); i != stack.end(); ++i) {
    std::cout << *i << std::endl;
  }
  while (stack.getSize() > 0) {
    std::cout << stack.pop() << std::endl;
  }
*/
  // так неправильно
  Stack<void*> voidStack;
 
  voidStack.push(new std::string("text"));
  voidStack.push(new int(9));
 
  int *x = (int*)voidStack.pop();
  std::cout << *x << std::endl;
  delete x;
 
  std::string *y = (std::string*)voidStack.pop();
  std::cout << *y << std::endl;
  delete y;
 
  return 0;
}
Так, конечно, делать не надо. Работать с этим -- сущий ад.
 
Текущее время: 11:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru