Вывод из list

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Frairs
Сообщения: 19
Зарегистрирован: 25 фев 2013, 20:04

Не получается вывести из контейнера list. Там кусочек кода, пытаюсь реализовать алгоритм Хаффмана.

Вот код:

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

class Node {
    public:
    int a;
    char c;
    Node *left, *right;
};


int main()
{
string s;

ifstream f; 
f.open("1.txt");
ofstream g;
g.open ("2.bin");

map <char, int> m; //тут символ и сколько раз он использован


while (!f.eof()) //считываем символы в файле
{
    char c;
    c=f.get();
    m[c]++; //в map записываем букву и map увеличивает на 1. То есть считаем буквы в тексте.
}

map <char, int>::iterator itr; //итератор на map

list<Node*> t; //лист с типом класса


for (itr=m.begin(); itr!=m.end(); itr++) //считываем с map и записываем в лист.
{
    Node *p=new Node;

    p->c=itr->first; //указатель на букву
    p->a=itr->second; //указатель на число, то есть сколько раз буква встречается.

    t.push_back(p); //запись в лист

}
   list<Node*>::iterator iii;
for (iii=t.begin(); iii!=t.end(); iii++)
{
   cout<<*iii;
}
У меня list в котором хранятся указатели на Node. Вот выводит он эти указатели, а как вывести то на что эти указатели указывают? Фишка в виде cout <<iii->p->c; не получается
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

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

list<Node*>::iterator iii;
for (iii=t.begin(); iii!=t.end(); iii++)
{
   cout<<*iii;
}
тут iii - итератор
Если ты хочешь пользучить значение, которое он хранит - пиши *iii
но он хранит указатели, ты можешь написать **iii чтобы разыменовать указатель и получить данные
но ты ведь хочешь не Node вывести (оператора потокового вывода ты не перегрузил у него, поэтому он не выведется так просто).
наверное надо обращаца по указателю к полям (я угадал, ты этого хочешь?) - тогда пиши (*iii)->a, например или (**iii).a
скобочки тут убрать нельзя, т.к. операция разыменования имеет низкий приоритет и выполница последней, а "a" - это целое число, к нему ведь нелья применить такую операцию.
Приглашаю на свой блог о программировании: pro-prof.com
GeorgeSoca
Сообщения: 95
Зарегистрирован: 12 окт 2015, 04:09
Откуда: Guam
Контактная информация:

На нашем сайте вы можете чувствовать себя в безопасности! Кроме того, мы используем зеркальные жесткие диски на все наши серверы, поэтому мы также взять резервную два раза в день на отдельных серверах. Мы используем ISPmanager, как на панели управления. ISPmanager является панель управления, которая позволяет легко управлять своей веб-сайт. С нами вы можете разместить столько веб-сайты и домены, которые вы хотите для учетной записи хостинга.
virtual hosting
Ответить