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

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

Войти
Регистрация
Восстановить пароль
 
Voron55555
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
#1

Стек и приоритеты - C++

01.08.2013, 02:20. Просмотров 452. Ответов 7
Метки нет (Все метки)

Ошибок при компиляции не возникает, но при проверке не выдает адресов элементов и их данных. Прошу прояснить недочеты и логические ошибки в моем прототипе. Заранее благодарю ответивших. Среда Dev.
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
#include <iostream>
class Trem{
      public:
      int Ch;
      bool Log;
      Trem *next;
      Trem(int d, bool t){Ch=d; Log=t;}
      };
class Steck{
      public:
      Trem *Beg;
      Trem *End;
      Steck(int d, bool t){
                Trem *p=new Trem(d,t);
                Beg=&(*p); 
                End=&(*p);
                }
      void push(int d, bool t){
           Trem *p=new Trem(d,t);
           (*End).next=&(*p);
           End=&(*p);
           }
      void pop(){
           Trem *p=&(*Beg);
           Beg=&(*Beg->next);
           delete p;
           }
      };
int main(){
     int n,r;
     bool er;
     std::cout<<"vvedite chislo el\n";
     std::cin>>n;
     Steck Dat(0,true);
     for(int i=0;i<n;i++){
             std::cout<<"vvedite int & bool dlya "<<i<<" elementa\n";
             std::cin>>r;
             std::cout<<"\n";
             std::cin>>er;
     Dat.push(r,er);
     }
     Trem *uk=&(*Dat.Beg);
     for(int i=0;i<n+1;i++) std::cout<<(*uk).Ch<<"&"<<(*uk).Log<<"\n";
     system("pause");
     for(int i=0;i<n+1;i++) Dat.pop();
     return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2013, 03:02     Стек и приоритеты #2
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
#include <iostream>
 
class Trem
{
      public:
      int Ch;
      bool Log;
      Trem *next;
      
      Trem(int d, bool t)
      {
          Ch  = d; 
          Log = t;
      }
};
 
class Steck
{
   public:
      Trem *End;
      
      Steck()
      {
           End = NULL;
      }
      
      void push(int d, bool t)
      {
           Trem *p = new Trem(d, t);
           p ->next = End;
           End = p;
      }
      
      void pop()
      {
            Trem *p = End;
            End = End ->next;
            delete p;
      }
};
 
int main()
{
     int n, r;
     bool er;
     std::cout << "vvedite chislo el\n";
     std::cin >> n;
     Steck Dat;
     for(int i = 0; i < n; i++)
     {
             std::cout << "vvedite int & bool dlya " << i << " elementa\n";
             std::cin >> r;
             std::cout << "\n";
             std::cin >> er;
             
             Dat.push(r, er);
     }
     
     Trem *uk = Dat.End;
     while (uk != NULL)
     {
        std::cout << uk ->Ch << "&" << uk ->Log << "\n";
        uk = uk ->next;
     }
     
     while (Dat.End != NULL)
     {
        Dat.pop();
     }
     
     system("pause");
     return 0;
}
Voron55555
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
01.08.2013, 11:03  [ТС]     Стек и приоритеты #3
Хочется уточнить некоторые вопросы. 1) Предпочтительнее использовать Null или же можно писать с 0? 2)Почему мы не берем адреса при присваивании или в рамках использования указателей членов в классах они берутся автоматически?
nonedark2008
820 / 578 / 111
Регистрация: 28.07.2012
Сообщений: 1,539
01.08.2013, 11:08     Стек и приоритеты #4
Цитата Сообщение от Voron55555 Посмотреть сообщение
1) Предпочтительнее использовать Null или же можно писать с 0?
Если есть поддержка C++11, то для указателей желательно использовать nullptr, а для остальных 0 или NULL(тут не важно ведь, если посмотреть то #define NULL 0).
Voron55555
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
01.08.2013, 11:13  [ТС]     Стек и приоритеты #5
nonedark2008 В чем особенность такого объявления?

Добавлено через 2 минуты
Да и вообще, лучше использовать подход создания контейнеров как класс в классе или же использовать STL и не париться?
nonedark2008
820 / 578 / 111
Регистрация: 28.07.2012
Сообщений: 1,539
01.08.2013, 11:21     Стек и приоритеты #6
Voron55555,
1) Если у тебя класс с конструкторами, один из которых принимает int, а другой например void *. Вам хочется вызвать второй констурктор и пишется MyClass(NULL), но в таком случае вызовется первый конструктор, т.к. NULL - это тот же самый 0, что есть число.
2) А #define NULL 0 пошло еще из далекого языка C. Думаю, что это просто для удобства, чтобы как-то различать некоторые моменты в коде.

Добавлено через 4 минуты
Цитата Сообщение от Voron55555 Посмотреть сообщение
Да и вообще, лучше использовать подход создания контейнеров как класс в классе или же использовать STL и не париться?
Зависит от задачи. Если проблема оптимизации программы не стоит ребром, то STL сгодится - не придется рожать велосипед. Если же производительность программы важна, то лучше уже писать что-то свое под конкретный случай для лучшей производительности, либо искать специальные библиотеки на этот случай.
ИМХО. Юзабилити и производительность плохо совместимы... STL жертвует производительностью ради удобства использования.
Voron55555
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
01.08.2013, 11:27  [ТС]     Стек и приоритеты #7
Благодарю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2013, 18:19     Стек и приоритеты
Еще ссылки по теме:

Приоритеты выполнения перегрузок операций C++
Стек C++
C++ Стек
Стек C++
приоритеты операций C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2013, 18:19     Стек и приоритеты #8
Цитата Сообщение от Voron55555 Посмотреть сообщение
2)Почему мы не берем адреса при присваивании или в рамках использования указателей членов в классах они берутся автоматически?
Вы, например, пишите:
C++
1
2
3
4
5
6
Trem *Beg;
...
Trem *p = new Trem(d, t);
...
Beg = &(*p); 
...
Beg и p указатели одного типа. Для того, чтобы присвоить значение однго указателя (адрес, который в нём содержится) другому, достаточно написать (как и для других переменных):
C++
1
Beg = p;
Вы делает тоже самое, только длинным путём: в переменную Beg (указатель) записывается адрес того, что содержится по адресу, который содержится в указателе p.
Yandex
Объявления
01.08.2013, 18:19     Стек и приоритеты
Ответ Создать тему
Опции темы

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