Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
KostyaKulakov
Заблокирован
#1

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

15.03.2013, 17:53. Просмотров 1974. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 17:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Работа со стеком (как достать элемент из стека?) (C++):

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

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

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

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

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

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

19
Kuzia domovenok
2215 / 1984 / 447
Регистрация: 25.03.2012
Сообщений: 6,974
Записей в блоге: 1
15.03.2013, 17:58 #2
Стандартный pop, к сожалению, не возвращает выталкиваемого из стека значения, а просто молча убирает одно значение с вершины стека. Глупый STL.
Я предлагаю так:
C++
1
2
3
4
    while(!a.empty()){
        std::cout << a.top() << "->";
        a.pop();
    }
1
KostyaKulakov
Заблокирован
15.03.2013, 18:50  [ТС] #3
а с листом тогда как быть?
C++
1
#include <list>
0
Croessmah
++Ͻ
14161 / 8086 / 1513
Регистрация: 27.09.2012
Сообщений: 19,929
Записей в блоге: 3
Завершенные тесты: 1
16.03.2013, 13:44 #4
Цитата Сообщение от 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
Заблокирован
16.03.2013, 13:48  [ТС] #5
Цитата Сообщение от 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
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
16.03.2013, 14:03 #6
KostyaKulakov, для него определены итераторы. Можно также, как и вектор обойти.
0
KostyaKulakov
Заблокирован
16.03.2013, 16:09  [ТС] #7
Цитата Сообщение от 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
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
16.03.2013, 16:45 #8
Цитата Сообщение от 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
Код
1 2 3 1 2 3
0
Kuzia domovenok
2215 / 1984 / 447
Регистрация: 25.03.2012
Сообщений: 6,974
Записей в блоге: 1
16.03.2013, 16:48 #9
Цитата Сообщение от go Посмотреть сообщение
Это ни есть хорошо.
Нет, как раз то, что ты пишешь называется STL abuse.
Чем больше STL тем хуже читаемость.
0
KostyaKulakov
Заблокирован
16.03.2013, 16:51  [ТС] #10
Цитата Сообщение от 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
Код
1 2 3 1 2 3
это бред, код стал трудно читаемым и намного больше, смысл писать больше?
1
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
16.03.2013, 19:30 #11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Нет, как раз то,
Читайте внимательно ВЕСЬ диалог.

Цитата Сообщение от KostyaKulakov Посмотреть сообщение
это бред, код стал трудно читаемым и намного больше, смысл писать больше?
Моя одна строка против ваших двух. Где больше? Больше букФ?
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
for(size_t i = 0; i < vector.size; ++i)
так цикл для вывода никто не делает.
0
rangerx
1941 / 1550 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
16.03.2013, 20:53 #12
Цитата Сообщение от 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
Заблокирован
17.03.2013, 08:07  [ТС] #13
Цитата Сообщение от go Посмотреть сообщение
Читайте внимательно ВЕСЬ диалог.


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

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

Не по теме:

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

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

Не по теме:


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

опять же вы используете stl, не обосновано причём. использовать итератор вектора и проверять его каждый раз, затратная операция.
0
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
17.03.2013, 14:07 #16
KostyaKulakov, Вы понимаете то, что пишете? Рекомендую прибегнуть к разделу http://www.cyberforum.ru/cpp-beginners/thread152353.html . Рекомендую начать с Hello, World!!! раздела.
0
KostyaKulakov
Заблокирован
17.03.2013, 16:47  [ТС] #17
Цитата Сообщение от go Посмотреть сообщение
KostyaKulakov, Вы понимаете то, что пишете? Рекомендую прибегнуть к разделу http://www.cyberforum.ru/cpp-beginners/thread152353.html . Рекомендую начать с Hello, World!!! раздела.
молодой человек вам сильно давит ваша гордость

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

Не по теме:

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

0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,231
18.03.2013, 01:39 #19
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
опять же вы используете stl, не обосновано причём. использовать итератор вектора и проверять его каждый раз, затратная операция.
Просто из любопытства: а for_each элементы коллекции по средствам колдовства перебирает, и когда остановиться по звёздам угадывает? К тому же цикл по элементам далеко не всегда с целью вывода их на экран устраивается. Их ещё и изменять приходится. Впрочем у for_each есть свои преймущества, но ограничивать набор способов организации цикла только теми, где "буковок меньше" как-то не правильно...
0
silent_1991
21.03.2013, 11:35     Работа со стеком (как достать элемент из стека?)
  #20

Не по теме:

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

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

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

1
21.03.2013, 11:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 11:35
Привет! Вот еще темы с ответами:

Как достать объект-контейнер, а не его элемент
Добрый вечер всем. Возник вопрос. Я читал Страуструпа и на одной из его...

Как удалить элемент стека по значению
Как удалить элемент стека по значению? struct stack { int x; stack...

Подскажите как добавить элемент в стек и вывести адрес новой вершины стека
Dynamic3 . Дано число D и указатель P1 на вершину непустого стека. Добавить...

Работа со стеком
Ребят, помогите пожалуйста с заданиями: Задание 1 Реализовать стек...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru