Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 17.04.2023
Сообщений: 4

Стек. Есть ли ошибки?

17.04.2023, 15:10. Показов 1961. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, пишу стек на плюсах. Подскажите пожалуйста, есть ли ошибки где-то?

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
#include <cstdio>
#include <cstdlib>
 
//#include <stdio.h>
//#include <stdlib.h>
 
#define BUF 10
 
class Stack{
private:
    int *data;
    size_t iter;
public:
 
    Stack(){
        data = (int *)std::calloc(BUF, sizeof(int));
        iter = 0;
    }
 
    ~Stack(){
        free(data);
    }
 
    void push(int value){
//        data[iter] = value;
//        iter++;
        data[iter++] = value;
    }
 
    size_t size(){
        return iter;
    }
 
    int pop(){
        return data[--iter];
    }
 
    int top(){
        return data[size() - 1];
    }
 
    int isEmpty(){
        return size() == 0;
    }
};
 
 
int main(){
    Stack s;
 
    for (int i=0; i<BUF; i++){
        s.push(i);
    }
 
    for (int i=0; i<BUF; i++){
        printf("%d) %d\n", i, s.pop());
    }
 
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.04.2023, 15:10
Ответы с готовыми решениями:

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

Используя стек проверить есть ли ошибки в заданном арифметическом выражении
Доброго времени суток, нужна помощь в решении задачки С++ на консоли В задаче сначала нужно сформировать стек элементов заданного типа и...

Стек и дек: Почему стек есть, с ним я могу работать, а дек я должен сам описывать?
Где взять этот дек? Почему я не могу в C# найти его и обратиться к нему? Почему стек есть, с ним я могу работать, а дек я должен сам...

37
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
18.04.2023, 09:05
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
или вообще не делается и программа крашнется.
- и это хорошо?
0
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
18.04.2023, 09:06
Catstail, нет . проверка не делается внутри методов push , pop ....
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
18.04.2023, 09:16
Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
контейнер должен быть быстрым. внутри методов pop, push, top проверки не делают. ( смотрите реализацию STL )
Это всего лишь реализация, принятая в stl. Заточенная строго под определённый шаблон использования. Вряд ли можно считать это единственно верным решением.

Более того, push в реализации stl вполне себе кинет исключение, если не хватит памяти. В реализации ТС буфер статического размера, так что по сути проверка "нет памяти" тоже нужна.
1
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
18.04.2023, 09:18
Цитата Сообщение от KSergey9 Посмотреть сообщение
Вряд ли можно считать это единственно верным решением.
решение будет зависить от поставленной задачи.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
18.04.2023, 09:19
Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
решение будет зависить от поставленной задачи.
Небо голубое, трава зелёная.
К чему это?
1
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
18.04.2023, 09:23
Цитата Сообщение от jawnbkajbjkb Посмотреть сообщение
Здравствуйте, пишу стек на плюсах. Подскажите пожалуйста, есть ли ошибки где-то?
KSergey9, не находите, что этого маловато для условия задачи.

Добавлено через 3 минуты
Цитата Сообщение от KSergey9 Посмотреть сообщение
Небо голубое, трава зелёная. К чему это?
какое задание ?
написать stl контейнер (stack) чтобы пройти собеседование ?
сдать лабу?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
18.04.2023, 09:26
Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
не находите, что этого маловато для условия задачи.
Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
пройти собеседование ?
сдать лабу?
У вас есть аргументы почему следует делать так и только так как в stl?
Пока похоже, что вы просто уводите тему в сторону.
0
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
18.04.2023, 09:28
Цитата Сообщение от KSergey9 Посмотреть сообщение
У вас есть аргументы почему следует делать так и только так как в stl?
KSergey9, пожалуйста. не надо придумывать. кто вам сказал что нужно делать ТОЛЬКО так?
0
18.04.2023, 09:33

Не по теме:

Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
не надо придумывать. кто вам сказал что нужно делать ТОЛЬКО так?
Тут один парень пробегал, баз вариантов сказал, что
Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
не соглашусь.
контейнер должен быть быстрым. внутри методов pop, push, top проверки не делают. ( смотрите реализацию STL )
Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
написал же как делается. или вообще не делается и программа крашнется.
Не знаете этого парня, случайно? ;)

0
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
18.04.2023, 09:37
Цитата Сообщение от KSergey9 Посмотреть сообщение
Не знаете его, случайно?
хорошо, пусть мой ответ будет дополнением к ответу Catstail
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6291 / 3015 / 1051
Регистрация: 01.06.2021
Сообщений: 11,421
18.04.2023, 10:07
Вообще, вся библиотека С++, в том числе STL, далеко не эталон и она рассчитана на общие, усредненные случаи. Это компромисс между скоростью, функциональностью, надёжностью и т.д. Если писатель является экспертом и у него есть свободное время, то он может написать свои функции, контейнеры, классы и пр., которые будут работать в разы лучше для его конкретного случая.
Но вот в рамках задания ТС не вижу смысла стараться написать что-то грандиозное, пытаясь подражать стандартной библиотеки или даже ее превзойти. Это же обычное школьное задание, ТС нужен всего лишь банальный пример реализации стека.
1
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
18.04.2023, 12:25
Цитата Сообщение от Royal_X Посмотреть сообщение
Но вот в рамках задания ТС не вижу смысла стараться написать что-то грандиозное
мне бы хотелось научиться делать правильно.
Цитата Сообщение от Royal_X Посмотреть сообщение
Вообще, вся библиотека С++, в том числе STL, далеко не эталон
тогда давайте не будем опираться на STL и не будем привязываться к языку программирования.

В ответе Catstail почувствовал проблемы, но скорее интуитивно. И сюда не спорить пришел.
Хочу знать как правильно, как сделать лучше, как разрабатывать качественные программы.
Хотел дополнить, как сделать лучше.

Взять хоть принципы Solid ,а принципы и созданы для того чтобы делать лучше.
1) Принцип единственной ответственности
Это означает, что класс и/или метод должен быть ответственен лишь за что-то одно. Если класс/метод отвечает за решение нескольких задач, его подсистемы, реализующие решение этих задач, будут связанными друг с другом. Изменения в одной подсистеме ведут к изменениям в другой.


Метод pop() только удаляет верхний элемент из стека и
больше ничего другого он делать не должен.

2) ​Принцип открытости/закрытости
Программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для модификации.

Нам не нужно изменять существующую кодовую базу для добавления новых функций, мы просто строим поверх нее или, что еще лучше, расширяем ее.


Нужно проверить что стек не пуст, мы не изменеяем метод pop(),
а добавляем в класс стек реализацию метода empty() и используем её.

3) Принцип разделения интерфейсов
Клиенты не должны вынужденно зависеть от методов, которыми не пользуются.


pop() -- Нужно вытолкнуть элемент из стека всё.

В коде, где уже есть проверка,
что стек не пустой, нет смысла проверять это снова:

C++
1
2
3
4
5
6
7
8
if(! stack.empty())
 
pop ()
{
   if(! stack.empty())   // лишняя проверка 
 
   // реализация 
}

Не по теме:

Цитата Сообщение от Royal_X Посмотреть сообщение
ТС нужен всего лишь банальный пример реализации стека.
(с) делать нужно хорошо плохо само получится

хотя бы постараться.

0
18.04.2023, 12:34

Не по теме:

Цитата Сообщение от vlisp Посмотреть сообщение
придумайте хотя бы 10 интерессных практических задач на использование стека, кроме ханойских башней
1. паттерн проектирования Command, через который везде реализуются undo/redo или forth/back.
2. обход дерева в глубину.
3. стек вызовов функций.
первое, что в голову пришло.

0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
18.04.2023, 12:39
Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
Взять хоть принципы Solid ,а принципы и созданы для того чтобы делать лучше.
- выскажусь по сему поводу. Принципы созданы для того, чтобы "делать лучше", это верно. Но принципы сильны обоснованием. Если просто "следовать принципам" - так это называется "доктринёрство".

Принцип единственной ответственности (если смотреть на него доктртинёрски) - это не что иное, как "к пуговицам претензии есть?" Взять тот же стек. pop и push - опасные операции (в том смысле, что обе могут вызвать крах). Поэтому обе требуют проверки. Если ее не сделать, то код становится опасным. Стоит ли делать ее отдельно? С т.з. производительности, это очевидно хуже (накладные расходы при лишнем вызове метода). Почему в STL это делается без контроля? Не знаю, исходников не видел. К А. Степанову отношусь с глубочайшим уважением. Но и он - не Бог, а человек.
1
0 / 0 / 0
Регистрация: 18.04.2023
Сообщений: 1
18.04.2023, 12:45
благодарю!
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
18.04.2023, 12:49
Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
Взять хоть принципы Solid ,а принципы и созданы для того чтобы делать лучше.
Вот только "лучше" - сильно зависит от условий задачи, как вы уже верно про это писали.

Не по теме:

PS
Недавно на хабре была замечательная переводная статья про "чистый код". А ведь идеологи этого "чисто-кода" тоже руководствовались принципами "лучше".

PPS
Вы сейчас просто защищаете те принципы и те подходы, к которым вы привыкли, вот и всё. Они видятся вам правильными логичными, но это лишь потому, что вы к ним привыкли, на них воспитывались так сказать. Более того, вы видите только очень определённые, привычные вам шаблоны применения интерфейсов. ну так они потому и такие шаблоны, что адаптированы под предоставляемые интерфейсы.

Я видел как минимум два проявления жестко укоренившихся привычек, которые люди применяли просто потому, что они именно и только такое видели.
1) Помню можно было отлично видеть на чем написана программа (в какой среде разработке) просто по тому, как у неё устроен интерфейс. Если сверху узкое окно с меню и инструментами, а под ним отдельное рабочее окно программы - это Delphi. Потому как там сама среда такая. Если SDI с перемещающейся панелькой инструментов - это Visual С++, потому как там среда такая :)

2) Отдел, все пишут на С++. Прошаренные, стандарты наизусть цитируют. Понадобилось на C# кусок сделать. Как делалось закрытие файла, чтобы гарантированно в нужный момент? Правильно, сделали обертку CFile, которая в деструкторе закрывала файл, а в коде все это оформлялось в виде using, чтобы деструктор сразу вызывался, а не когда GC сработает. И это при том, что в C# есть отличная конструкция try/finally (которй нет или не было в C++). Но мЫшление, абсолютно закостенелое подходами из C++, другим вариантам кроме как "объект с деструктором" - абсолютно противилось, даже не предполагало. Ну и когда выяснилась проблема с отложенным вызовом деструктора из-за GC - был найден "трюк" с using.



Добавлено через 4 минуты
Цитата Сообщение от Catstail Посмотреть сообщение
Почему в STL это делается без контроля? Не знаю, исходников не видел
Потому что в документации написано, что pop на пустом контейнере - UB. Это ж так удобно написать про UB.
Впрочем, справедливости ради стоит сказать, что именно поведение stack зависит от поведения контейнера, который он использует для хранения данных; прям так и написано в документации. Просто по умолчанию используется deque, у которого (по документации) вот такое поведение - UB при пустом
0
 Аватар для vlisp
1070 / 991 / 153
Регистрация: 10.08.2015
Сообщений: 5,413
18.04.2023, 13:33
Цитата Сообщение от GbaLog- Посмотреть сообщение
обход дерева в глубину.
дерево - это не стек. обход - это не задача, а метод
я просил интересных, чтоб это было не скучно изучать
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
18.04.2023, 13:45
Цитата Сообщение от vlisp Посмотреть сообщение
дерево - это не стек
и?

Цитата Сообщение от vlisp Посмотреть сообщение
обход - это не задача, а метод
обход дерева в глубину - это задача.
обход дерева в глубину с помощью стека - это метод выполнения задачи.

Цитата Сообщение от vlisp Посмотреть сообщение
я просил интересных
эти интересные и имеющие практическое применение.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.04.2023, 13:45

Определить, есть ли в списке Петровы (Петров, Петрова), если есть, то вывести их адрес (адреса) и записать их в стек.
6. Дан список данных о работниках фирмы: фамилия, имя, отчество, адрес (улица, дом, квартира) и дата поступления на работу (месяц, год)....

Найти ошибки в данной программе (известно что есть только 2 ошибки)
У меня в модуле с програмирования задание: Найти ошибки в данной программе (известно что есть только 2 ошибки) .model small .data ...

Просмотреть весь стек ошибки
Добрый день. В одном из методов происходит ошибка, в программе около 100 точек входа в данный метод. Как можно просмотреть стек...

Мне нужно всего лишь найти синтаксические ошибки, второй день ломаю голову, в условии есть ошибки
Мне нужно всего лишь найти синтаксические ошибки, второй день ломаю голову, в условии есть ошибки. А в каком именно условии не знаю:( ...

Есть ли ошибки в программе? Если есть, то необходимо исправить
Есть ли ошибки в программе? Если есть, то необходимо исправить. Задача: Дана строка символов из строчных русских букв , слова...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru