Использование std в C++ (Пара вопросов по синтаксису)

Модератор: Модераторы разделов

Аватара пользователя
Sarius
Сообщения: 80
ОС: Debian

Использование std в C++

Сообщение Sarius »

Покажите, пожалуйста, простой пример работы со стеком. Например поместить в него пару чисел, а потом вывести.
Спасибо сказали:
Аватара пользователя
Sarius
Сообщения: 80
ОС: Debian

Re: Использование std в C++

Сообщение Sarius »

Код: Выделить всё

    stack<int> st1;
    st1.push(10);
    cout << st1.top();


Так. Но это только для одного элемента. А если несколько?
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Использование std в C++

Сообщение eduard_pustobaev »

Sarius писал(а):
16.01.2008 19:33
Так. Но это только для одного элемента. А если несколько?

А что вам нужно? Доступ по индексу? Так зачем тогда стек?
P.S. По большому счёту стек должен предоставлять push(), pop(), top(). Остальное уже доп. возможности.
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Использование std в C++

Сообщение drBatty »

Sarius писал(а):
16.01.2008 19:33
Так. Но это только для одного элемента. А если несколько?

Код: Выделить всё

    stack<int> s;
    s.push(1);
    s.push(2);
    s.push(3);
    int x = s.top();
    s.pop();
    int y = s.top();
    s.pop();
    int z = s.top();
    s.pop();
    cout<<x<<y<<z<<endl;

вывод 321
google
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Sarius
Сообщения: 80
ОС: Debian

Re: Использование std в C++

Сообщение Sarius »

Спасибо за ответы по стеку.

Не поможите ли зазобраться ещё с set? Хочу поместить в него данные пользовательского класса, никак не получается.

Вот класс:

Код: Выделить всё

class kvitansion
{
    int number;
    int date;
    float summ;
    public:
    kvitansion();
    kvitansion(int,int,float);
    kvitansion(const kvitansion&);
    ~kvitansion();
    void set(int,int,float);
    void setnumber(int);
    void setdate();
    void setsumm();
    void show();

    int getnumber();
    int getdate();
    float getsumm();
};


Ну и собственно сама програмка:

Код: Выделить всё

#include <iostream>
#include <set>
#include "kvitansion.h"
using namespace std;

int main()
{
    set<kvitansion> container;
    set<kvitansion>::iterator iter;
    container.insert(perem1);
return 0;
}


С темже stack прекравно заработала, только пришлось перегрузить operator<< для вывода.
Спасибо сказали:
Alexandro
Сообщения: 33
ОС: FreeBSD, Ubuntu, Debian

Re: Использование std в C++

Сообщение Alexandro »

Наверное операторы сравнения какие-то нужны
Спасибо сказали:
Serik
Сообщения: 149
ОС: SuSE Linux

Re: Использование std в C++

Сообщение Serik »

Sarius писал(а):
23.01.2008 11:05
Не поможите ли зазобраться ещё с set? Хочу поместить в него данные пользовательского класса, никак не получается.
Что именно не получается ?
Я бы хранил не объекты, а указатели.

Код:

set<kvitansion *> container;
Спасибо сказали:
Alexandro
Сообщения: 33
ОС: FreeBSD, Ubuntu, Debian

Re: Использование std в C++

Сообщение Alexandro »

Повторяю, чтобы заработало с классом kvitansion (а не указателем на него) нужно, чтобы у класса был определен оператор сравнения, а именно "<".
Стандартная библиотека шаблонов
Спасибо сказали:
Аватара пользователя
Sarius
Сообщения: 80
ОС: Debian

Re: Использование std в C++

Сообщение Sarius »

После перегрузки < и () всё заработало.

Код: Выделить всё

bool kvitansion::operator<(kvitansion one) const
{
    bool result=false;
    if (number<one.number) {result=true;};
    return result;
}
bool kvitansion::operator()(kvitansion one, kvitansion two)
{
    return one.getnumber() < two.getnumber();
}


Осталось только с выводом разобраться, но это уже не сложно.
Спасибо сказали: