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

Стек на основе массива структур - эт как понять читаю литературу и не могу понять! - C++

Восстановить пароль Регистрация
 
privit_91
13 / 13 / 0
Регистрация: 06.11.2012
Сообщений: 79
31.12.2012, 18:31     Стек на основе массива структур - эт как понять читаю литературу и не могу понять! #1
Стек статически (на основе массива структур). Пример структура "Товар" которая включает в себя: № по каталогу(ключ), Название, цена, срок годности.
Как правильно это реализовать?
Как реализовать добавление элементов в стек.
Помогите понять?????
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.12.2012, 18:31     Стек на основе массива структур - эт как понять читаю литературу и не могу понять!
Посмотрите здесь:

не могу понять как пользоваться методами C++
C++ Компилятор выдает ошибку при объявлении массива. Не могу понять где соль
C++ Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо)
Не могу понять, как исправить ошибку C++
C++ Не могу понять как передать
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.12.2012, 18:34     Стек на основе массива структур - эт как понять читаю литературу и не могу понять! #2
Цитата Сообщение от privit_91 Посмотреть сообщение
Как реализовать добавление элементов в стек.
std::stack
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
31.12.2012, 20:10     Стек на основе массива структур - эт как понять читаю литературу и не могу понять! #3
Цитата Сообщение от go Посмотреть сообщение
std::stack
вообще не в тему.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
31.12.2012, 20:20     Стек на основе массива структур - эт как понять читаю литературу и не могу понять! #4
Тебе нужен код или понять? (Если код, приведи задание.)
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.12.2012, 20:29     Стек на основе массива структур - эт как понять читаю литературу и не могу понять! #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
вообще не в тему.
Почему?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
31.12.2012, 20:33     Стек на основе массива структур - эт как понять читаю литературу и не могу понять! #6
потому что ТС требует создать структуру "стек" самостоятельно на основе статического массива!
Например так:
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
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std; 
struct data{
int val;
data(int d=0):val(d){};
};
const int capacity=100;
struct stack{
    data buffer[capacity];
    data* head;
    stack(){head=buffer;}
    void push(data val){
        if(head!=(capacity+buffer)){
            *head=val;
            head++;
        }
    }
    data pop(){
        if (head!=buffer){
            head--;
            return *head;
        }
        else return -1;
    }
};
 
int main()
{
    stack s;
    s.push(4);
    s.push(5);
    cout<<s.pop().val<<" "<<s.pop().val;
    system("pause");  
    return 0;
}
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
31.12.2012, 20:57     Стек на основе массива структур - эт как понять читаю литературу и не могу понять! #7
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
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <stdexcept>
#include <string>
 
template<class T>
class StaticStack {
 public:
  explicit StaticStack(size_t capacity) : capacity(capacity), cursor(0),
    stack(new T[capacity]) {}
  virtual ~StaticStack() {
    delete [] stack;
  }
  bool isEmpty() const { return cursor == 0; }
  size_t getSize() const { return cursor; }
  size_t getCapacity() const { return capacity; }
  const T &getTop() const {
    if (isEmpty()) 
      throw std::underflow_error("stack is empty");
    else
      return stack[cursor - 1];
  }
  void push(const T &value) {
    if (getSize() >= getCapacity())
      throw std::overflow_error("stack overflow");
    else
      stack[cursor++] = value;
  }
  T pop() {
    if (isEmpty()) 
      throw std::underflow_error("stack is empty");
    else
      return stack[--cursor];
  }
 private:
  StaticStack(const StaticStack &);
  StaticStack &operator=(const StaticStack &);
  size_t capacity;
  size_t cursor;
  T *stack;
};
 
class Product {
 public:
  Product() : id(), name(), cost(), bestForDays() {}
  Product(int id, const std::string &name, double cost, int bestForDays)
    : id(id), name(name), cost(cost), bestForDays(bestForDays) {}
  int getId() const { return id; }
  const std::string &getName() const { return name; }
  double getCost() const { return cost; }
  int getBestForDays() const { return bestForDays; }
 private:
  int id;
  std::string name;
  double cost;
  int bestForDays;
};
 
Product getRandomProduct() {
  static const std::string names[] = {"milk", "tea", "peanut", "bread", "apple"};
  static int lastId = 0;
  return Product(lastId++, names[rand() % (sizeof(names) / sizeof(std::string))],
    (1000 + rand() % 1000) / 100., 10 + rand() % 7);
}
 
std::ostream &operator<<(std::ostream &stream, const Product &product) {
  stream << "Product{"
    "id=" << product.getId() << "," <<
    "name=" << product.getName() << "," <<
    "cost=" << product.getCost() << "," <<
    "bestForDays=" << product.getBestForDays() << "}";
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
  StaticStack<Product> stack(15);
 
  try {
    for (int i = 0; i < 10 + rand() % 10; ++i)
      stack.push(getRandomProduct());
  } catch (std::overflow_error e) {
    std::cout << "Error. Stack capacity is " << stack.getCapacity() <<
      ", stack is full. No more elements allowed." << std::endl;
  }
 
  std::cout << "Number of products: " << stack.getSize() << std::endl;
  while (!stack.isEmpty()) {
    std::cout << stack.pop() << std::endl;
  }
  
  std::cin.peek();
  return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2012, 21:02     Стек на основе массива структур - эт как понять читаю литературу и не могу понять!
Еще ссылки по теме:

Передача массива в функцию. Не могу понять что не так C++
C++ Не могу понять, как работает программа
Не могу понять как прочитать файл C++

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

Или воспользуйтесь поиском по форуму:
go
31.12.2012, 21:02     Стек на основе массива структур - эт как понять читаю литературу и не могу понять!
  #8

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
потому что ТС требует создать структуру "стек" самостоятельно на основе статического массива!
Ну да. Не понял задание, из-за его кривизны. Думал, что нужно хранить структуры в стэке.

Yandex
Объявления
31.12.2012, 21:02     Стек на основе массива структур - эт как понять читаю литературу и не могу понять!
Ответ Создать тему
Опции темы

Текущее время: 19:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru