Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2022, 23:44   #1
Jorsan
Пользователь
 
Регистрация: 14.03.2021
Сообщений: 39
Вопрос Чтение stack'а

Здравствуйте, мне нужно прочитать stack, при этом не удаляя элементы из него. Не знаю как это реализовать, но есть неработающая наработка:
Код:
#include <iostream>
#include <locale>
#include <stack>
#include <vector>

using namespace std;

main()
{
setlocale(0, "");

int n, i = 0;
int *p;
int a[n];
stack <int> st;
vector <int> ivec;

cout<<"Введите количество чисел\n";
cin>>n;
cout<<"Вводимое кол-во "<<n<<" чисел\n";

while (i != n)
{
    cin>>*p;
    st.push(*p);
    ivec.push_back(*p);
}

for (i = 0; i < n; i++)
{
    cout<<*p<<endl;
}
}
Jorsan вне форума Ответить с цитированием
Старый 06.04.2022, 09:04   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Но стек не предназначен для этого. Интернет (stackoverflow) предлагает скопировать стек и вывести копию:
Код:
#include <stack>
#include <vector>
#include <iostream>

int main() {
    std::stack<int> foo;
    foo.push(1);
    foo.push(2);
    foo.push(3);

    std::stack<int> bar { foo };

    while(bar.size()) {
        std::cout << " - " << bar.top() << '\n';
        bar.pop();
    }

    std::cout << "foo-size: " << foo.size() << '\n';
    std::cout << "bar-size: " << bar.size() << '\n';
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 06.04.2022, 15:08   #3
Jorsan
Пользователь
 
Регистрация: 14.03.2021
Сообщений: 39
По умолчанию

Но у меня преподаватель как-то смог вывести stack через указатели и массив.
Jorsan вне форума Ответить с цитированием
Старый 06.04.2022, 15:16   #4
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Ну можно и микроскопом щи хлебать... Только нафиг у такого учиться. Делайте стек на основе массива, берите указатель на начало и, сдвигая, выводите.
ForenLi вне форума Ответить с цитированием
Старый 06.04.2022, 16:14   #5
Jorsan
Пользователь
 
Регистрация: 14.03.2021
Сообщений: 39
По умолчанию

Просто задание дала такое. Вот с этим я как раз-таки справиться и не могу.
Jorsan вне форума Ответить с цитированием
Старый 06.04.2022, 17:31   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Для микроконтроллера, к примеру, это - как два байта переслать. На РС-шном ассемблере, думаю, тоже. Копировать SS в DS и считать нужное число байт в строну уменьшения.
Только вот на асме РС я писал лет 30 тому, и без EBX, ECX, EDX и пр. В общем, для 286.
Но принцип, думаю, остался прежним. Впрочем, ОС может такие манипуляции и не позволить.
А так создать собственный стек и считать его - ума палата не нужна. Но в задании, видимо, имелся в виду системный стек.
digitalis вне форума Ответить с цитированием
Старый 06.04.2022, 17:35   #7
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

digitalis, в задании имелось в виду структура данных под названием стек. Которую студенты могут реализовать на основе массива, связного списка, ... Не надо в дебри лезть.
ForenLi вне форума Ответить с цитированием
Старый 06.04.2022, 17:36   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Преподу виднее...
digitalis вне форума Ответить с цитированием
Старый 06.04.2022, 22:55   #9
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Как отмечено BDA, стек - это не та структура, с которой можно обращаться как хочется преподу.
Он просто заблуждается. И с кем такого не бывает.
Структура, которая удовлетворила бы ваш вопрос - односвязный список.

Вместе с тем, берём, например, книжку*): Т.А. Павловская, Программирование на ЯВУ, С++.
Там есть, на стр. 119, 120, 121 описание такой структуры (стека), и что важно, код.
Этот код можно использовать для создания стека и туда можно добавить операцию, которая будет удовлетворять потребность вашего препода.
Не забудьте заглянуть на стр. 310 и кое что уточнить для себя и препода.

*) Да простят мне знатоки

PS: 1. Возможен вариант, что вы неверно транслируете требование препода.
2. Различные структуры данных придуманы не для того, что бы с ними обращаться вольно.
Желающий может придумать и свою структуру, но тогда это будет аля-дерево Боширова или якобы-очередь Петрова
Но уж ни как не стек.

PSS: Не стесняйтесь, донесите это обсуждение до препода.
Возможно вы получите доп. разъяснение и всё прояснится, а возможно, что и препод сменит задание.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++-Stack boberwithyou Общие вопросы C/C++ 1 26.02.2016 12:49
STACK Lawliet32 C# (си шарп) 2 31.03.2011 14:04
Stack Overflow Xeonc Общие вопросы C/C++ 3 22.10.2010 08:07
Stack OverFlow Tanya2008 Общие вопросы Delphi 6 11.05.2009 15:16
Помогите со Stack МаксMorfey Помощь студентам 0 10.05.2009 16:37