Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/55: Рейтинг темы: голосов - 55, средняя оценка - 4.93
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2

Работа со стеком (как достать элемент из стека?)

15.03.2013, 17:53. Показов 11066. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include <iostream>
#include <stack>
 
 
 
int main()
{
    std::stack<int> a;
 
    a.push(1);
    a.push(1);
    a.push(1);
    a.push(1);
    a.push(1);
    a.push(5);
    a.push(1);
    a.push(6);
    a.push(1);
    a.push(1);
    a.push(1);
    a.push(1);
 
    for(size_t i=0; i < a.size(); ++i)
        std::cout << a.pop() << "->";
 
 
    return 0;
}
не могу понять, как достать элемент из стека...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2013, 17:53
Ответы с готовыми решениями:

Создать класс для работы со стеком. Элемент стека – действительное число
Создать класс для работы со стеком. Элемент стека – действительное число. Применить класс для вывода возрастающих серий последовательности...

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

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

19
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
15.03.2013, 17:58
Стандартный pop, к сожалению, не возвращает выталкиваемого из стека значения, а просто молча убирает одно значение с вершины стека. Глупый STL.
Я предлагаю так:
C++
1
2
3
4
    while(!a.empty()){
        std::cout << a.top() << "->";
        a.pop();
    }
1
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
15.03.2013, 18:50  [ТС]
а с листом тогда как быть?
C++
1
#include <list>
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
16.03.2013, 13:44
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
а с листом тогда как быть?
Выводит, например, так можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <algorithm>
#include <iterator>
#include <list> 
int main(){
    std::list<int> a;
    a.push_back(1);
    a.push_back(3);
    a.push_back(8);
    a.push_back(2);
    a.push_back(7);
    std::copy(a.begin(),a.end(),std::ostream_iterator<int>(std::cout," "));
}
1
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
16.03.2013, 13:48  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Выводит, например, так можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <algorithm>
#include <iterator>
#include <list> 
int main(){
    std::list<int> a;
    a.push_back(1);
    a.push_back(3);
    a.push_back(8);
    a.push_back(2);
    a.push_back(7);
    std::copy(a.begin(),a.end(),std::ostream_iterator<int>(std::cout," "));
}
боже упаси..
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
16.03.2013, 14:03
KostyaKulakov, для него определены итераторы. Можно также, как и вектор обойти.
0
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
16.03.2013, 16:09  [ТС]
Цитата Сообщение от go Посмотреть сообщение
KostyaKulakov, для него определены итераторы. Можно также, как и вектор обойти.
C++
1
2
3
4
for(size_t i = 0; i < vector.size; ++i)
{
     std::cout << vector.at(i);
}
и

C++
1
std::copy(a.begin(),a.end(),std::ostream_iterator<int>(std::cout," "));
разницу чувствуете?
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
16.03.2013, 16:45
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
for(size_t i = 0; i < vector.size; ++i)
{
* * *std::cout << vector.at(i);
}
Это ни есть хорошо.

Цитата Сообщение от KostyaKulakov Посмотреть сообщение
разницу чувствуете?
Нет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <list>
 
int main() 
{
   std::vector<int> v = { 1, 2, 3 };
   std::list<int> l(std::begin(v), std::end(v));
   
   std::copy(std::begin(v), std::end(v), std::ostream_iterator<int> 
      (std::cout, " "));
   std::copy(std::begin(l), std::end(l), std::ostream_iterator<int> 
      (std::cout, " "));
   std::cout << std::endl;
}
http://liveworkspace.org/code/OVDj4$0
Code
1
1 2 3 1 2 3
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
16.03.2013, 16:48
Цитата Сообщение от go Посмотреть сообщение
Это ни есть хорошо.
Нет, как раз то, что ты пишешь называется STL abuse.
Чем больше STL тем хуже читаемость.
0
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
16.03.2013, 16:51  [ТС]
Цитата Сообщение от go Посмотреть сообщение
Это ни есть хорошо.


Нет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <list>
 
int main() 
{
   std::vector<int> v = { 1, 2, 3 };
   std::list<int> l(std::begin(v), std::end(v));
   
   std::copy(std::begin(v), std::end(v), std::ostream_iterator<int> 
      (std::cout, " "));
   std::copy(std::begin(l), std::end(l), std::ostream_iterator<int> 
      (std::cout, " "));
   std::cout << std::endl;
}
http://liveworkspace.org/code/OVDj4$0
Code
1
1 2 3 1 2 3
это бред, код стал трудно читаемым и намного больше, смысл писать больше?
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
16.03.2013, 19:30
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Нет, как раз то,
Читайте внимательно ВЕСЬ диалог.

Цитата Сообщение от KostyaKulakov Посмотреть сообщение
это бред, код стал трудно читаемым и намного больше, смысл писать больше?
Моя одна строка против ваших двух. Где больше? Больше букФ?
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
for(size_t i = 0; i < vector.size; ++i)
так цикл для вывода никто не делает.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
16.03.2013, 20:53
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Стандартный pop, к сожалению, не возвращает выталкиваемого из стека значения, а просто молча убирает одно значение с вершины стека. Глупый STL.
Т.е., по-твоему, pop должен каждый раз создавать и возвращать копию удаляемого объекта? )
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
а с листом тогда как быть?
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
#include <list>
#include <algorithm>
#include <iterator>
#include <iostream>
 
int main()
{
    using IntList = std::list<int>;
    using OstreamIntIter = std::ostream_iterator<int>;
 
    IntList lst = {1, 2, 3, 4, 5};
 
    // 1
    for(IntList::iterator it = lst.begin(); it != lst.end(); ++it)
        std::cout << *it << '\n';
 
    // 2
    for(auto it = lst.begin(); it != lst.end(); ++it)
        std::cout << *it << '\n';
 
    // 3
    for(const auto item : lst)
        std::cout << item << '\n';
 
    // 4
    std::copy(lst.begin(), lst.end(),
              OstreamIntIter(std::cout, "\n"));
}
1
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
17.03.2013, 08:07  [ТС]
Цитата Сообщение от go Посмотреть сообщение
Читайте внимательно ВЕСЬ диалог.


Моя одна строка против ваших двух. Где больше? Больше букФ?

так цикл для вывода никто не делает.
C++
1
for_each(vec.begin(), vec.end(), [](int i){std::cout << i;});
шах и мат?
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
17.03.2013, 09:25
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
шах и мат?
Зачем использовать лямбда, и не использовать цикл for по коллекции?
C++
1
2
3
for (auto &i : vec)
      std::cout << i << " ";
std::cout << std::endl;

Не по теме:

Цитата Сообщение от KostyaKulakov Посмотреть сообщение
шах и мат?
Я смотрю: Вы играть вообще не умеете.

0
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
17.03.2013, 11:51  [ТС]
Цитата Сообщение от go Посмотреть сообщение
Зачем использовать лямбда, и не использовать цикл for по коллекции?
C++
1
2
3
for (auto &i : vec)
      std::cout << i << " ";
std::cout << std::endl;

Не по теме:


Я смотрю: Вы играть вообще не умеете.

опять же вы используете stl, не обосновано причём. использовать итератор вектора и проверять его каждый раз, затратная операция.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
17.03.2013, 14:07
KostyaKulakov, Вы понимаете то, что пишете? Рекомендую прибегнуть к разделу Литература C++ . Рекомендую начать с Hello, World!!! раздела.
0
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
17.03.2013, 16:47  [ТС]
Цитата Сообщение от go Посмотреть сообщение
KostyaKulakov, Вы понимаете то, что пишете? Рекомендую прибегнуть к разделу Литература C++ . Рекомендую начать с Hello, World!!! раздела.
молодой человек вам сильно давит ваша гордость

понять, что вы проиграли в этом споре, можно по моей репутацией, с помощью вас которая стала -70
0
go
17.03.2013, 16:55

Не по теме:

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

0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
18.03.2013, 01:39
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
опять же вы используете stl, не обосновано причём. использовать итератор вектора и проверять его каждый раз, затратная операция.
Просто из любопытства: а for_each элементы коллекции по средствам колдовства перебирает, и когда остановиться по звёздам угадывает? К тому же цикл по элементам далеко не всегда с целью вывода их на экран устраивается. Их ещё и изменять приходится. Впрочем у for_each есть свои преймущества, но ограничивать набор способов организации цикла только теми, где "буковок меньше" как-то не правильно...
0
21.03.2013, 11:35

Не по теме:

Цитата Сообщение от KostyaKulakov Посмотреть сообщение
опять же вы используете stl, не обосновано причём
Это вы используете stl. std::for_each - алгоритм (шаблонная функция) из stl, for по коллекции же встроен в ядро языка и обрабатывается компилятором.

Цитата Сообщение от KostyaKulakov Посмотреть сообщение
использовать итератор вектора и проверять его каждый раз, затратная операция.
1. См. комментарий easybudda.
2. А использование лямбд - не затратно? Лямбда компилятором разворачивается в обычный функтор, и на каждой итерации в for_each вызывается operator() этого функтора.

Вообще, я что-то упустил тот момент, когда использование stl стало дурным тоном. Стандартные реализации распространённых алгоритмов всегда надо предпочитать собственным велосипедам.

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.03.2013, 11:35
Помогаю со студенческими работами здесь

Работа со стеком (найти мин и макс элемент)
есть стек struct Stack { int info; //значение элемента Stack * next; //указатель на следующий элемент...

Удалить элемент из стека по условию и добавить элемент в начало стека
Здравствуйте, помогите пожалуйста исправить(дописать) программы. 1). Нужно удалить элемент, находящийся в середине стека , если число...

Реализовать класс Стек, моделирующий работу со стеком (не учитывая переполнения и пустоту стека)
Методы мной уже описаны. Они очень простые и понятные. Но я не понимаю, как организовать работу программы? То есть мне не понятно, как...

Программа реализующая действия со стеком. Формирование и вывод содержимого стека на экран дисплея
Помогите пожалуйста с программой, или приведите пример пример программы реализующей действия со стеком. Формирование и вывод содержимого...

Считать из стека верхний элемент и меняет значение переменной стека
Нужно определить макрос, который читает из стека верхний элемент и меняет значение переменной стека


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru