Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > std::list внутри класса


Автор: vamp0x00 28.10.2010, 00:51
Код

#include <iostream>
#include <list>
using namespace std;

template <class Type> class Vect
{
public:
    list<Type> lst;
    list<Type>::iterator p;
    Vect() {}
    ~Vect() { cout << "Destroy " << this << endl; }
    int size() const { return lst.size(); }
    void push(Type el) { lst.push_back(el); }
    void print() const {
        for (p = lst.begin(); p != lst.end(); p++) 
            cout << *p;
        cout << endl;
    }
};

int main()
{
    Vect <int> a;
}



как работать с списком внутри класса? 

Автор: kosmonaFFFt 28.10.2010, 04:58
Цитата(vamp0x00 @  28.10.2010,  04:51 Найти цитируемый пост)
void print() const {        for (p = lst.begin(); p != lst.end(); p++)             cout << *p;        cout << endl;    }


Ты уже с ним работаешь... )

Автор: Crafty 28.10.2010, 05:51
Код

#include <iostream>
#include <list>
using namespace std;
template <class Type> class Vect
{
public:
    list<Type> lst;
    typename list<Type>::iterator p;    // указываем typename явно
    Vect() {}
    ~Vect() { cout << "Destroy " << this << endl; }
    int size() const { return lst.size(); }
    void push(Type el) { lst.push_back(el); }
    void print() {                                 // print не может быть константной так как изменяет p
        for (p = lst.begin(); p != lst.end(); p++) 
            cout << *p;
        cout << endl;
    }
};
int main()
{
    Vect<int> a;
    a.push(1);
    a.push(2);
    a.push(3);
    a.print();
}

Автор: bsa 28.10.2010, 12:48
vamp0x00, да и строчку 8 следует поместить между 13 и 14. Не надо итераторы внутри класса объявлять.
Кстати, объявление lst следует переместить в приватную область класса.

Автор: Crafty 28.10.2010, 12:59
vamp0x00, ещё если итератор только для чтения то лучше использовать typename list<Type>::const_iterator p; 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)