Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
KostyaKulakov
Заблокирован
#1

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

15.03.2013, 17:53. Просмотров 1753. Ответов 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++):

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

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

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

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

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

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

19
Kuzia domovenok
2117 / 1946 / 190
Регистрация: 25.03.2012
Сообщений: 6,750
Записей в блоге: 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
Ушел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 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
Эксперт С++
3586 / 1366 / 129
Регистрация: 16.04.2009
Сообщений: 4,528
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
Эксперт С++
3586 / 1366 / 129
Регистрация: 16.04.2009
Сообщений: 4,528
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
2117 / 1946 / 190
Регистрация: 25.03.2012
Сообщений: 6,750
Записей в блоге: 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
Эксперт С++
3586 / 1366 / 129
Регистрация: 16.04.2009
Сообщений: 4,528
16.03.2013, 19:30 #11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Нет, как раз то,
Читайте внимательно ВЕСЬ диалог.

Цитата Сообщение от KostyaKulakov Посмотреть сообщение
это бред, код стал трудно читаемым и намного больше, смысл писать больше?
Моя одна строка против ваших двух. Где больше? Больше букФ?
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
for(size_t i = 0; i < vector.size; ++i)
так цикл для вывода никто не делает.
0
rangerx
1937 / 1546 / 141
Регистрация: 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
Эксперт С++
3586 / 1366 / 129
Регистрация: 16.04.2009
Сообщений: 4,528
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
17.03.2013, 11:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2013, 11:51
Привет! Вот еще темы с ответами:

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

работа со стеком - C++
попалась такая задача: создать стек для положительных и отрицательных чисел. максимальный размер стека ввести с экрана. Создать функции для...

Работа со стеком! - C++
Необходимо записать заполнение стека с клавиатуры. Добавлено через 44 секунды #include &lt;iostream&gt; #include &lt;stack&gt; int main...

Работа со стеком - C++
Задача: Написать программу которая создает стек целых чисел считываемых из файла и удаляет из него повторяющиеся числа. Вывести элементы...


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

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

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