Tworzenie obiektu przetwarzającego dane wczytane z pliku tekstowego

2018-11-25 03:31
0

Czesc,
mam do zrobienia do szkoly zadanie związane z STL,ale cos nie do konca chyba rozumiem. Mianowicie zdanie brzmi mniej wiecej tak
"Korzystając z kontenerów biblioteki STL utwórz typ danych – kolejkę priorytetową list, przy czym elementami list są słowa (obiekty typu string).
Zadeklaruj klasę Mikser dziedziczącą po tym typie danych, która będzie posiadała następujące składowe: konstruktor, destruktor, metody: open, write.
Napisz program który, wykorzystując obiekt klasy Mikser, przetwarza dane wczytane z pliku tekstowego mistrz.txt. W pliku znajdują się dane wejściowe: kilka wierszy tekstu, w każdym wierszu po kilka słów. Program tworzy obiekt typu Mikser, a następnie na jego rzecz wywołuje kolejno metody: open i write"
Moj szkic na te chwile:

#include <functional>
#include <queue>
#include <iostream>
#include <list>

using namespace std;

class Mikser :public priority_queue< string, list<string>, greater<string> >
{
public:
    Mikser(){ }
    ~Mikser(){ }
    void open(){};
    void write(){};

};

int main()
{
    Mikser kolejka;
}

Tylko ze kiedy probuje dodac cos do tej kolejki np kolejka.push("pierwszy") albo kolejka.emplace("drugi") to kompilator sypie mi bledami. Z tego co czytalem to lista chyba nie moze byc kontenerem kolejki priorytetowej ze wzgledu na nieposiadanie iteratorow swobodnego dostepu ale sam juz nie wiem. Bede wdzieczny za kazda porade

edytowany 1x, ostatnio: furious programming, 2018-11-25 04:11

Pozostało 580 znaków

2018-11-25 10:10
0

"The type of the underlying container to use to store the elements. The container must satisfy the requirements of SequenceContainer, and its iterators must satisfy the requirements of RandomAccessIterator. Additionally, it must provide the following functions with the usual semantics"

Lista ma jedynie BidirectionalIterator, która jest niżej w hierarchii niż RandomAccessIterator.


Pozostało 580 znaków

2018-11-25 15:14
0

Czyli nie mogę umieścić w kolejce priorytetowej żadnej listy?

Pozostało 580 znaków

2018-11-25 15:25
0

Możesz je umieścić w vectorze, po treści zadania nie powinno to mieć znaczenia.


Pozostało 580 znaków

2018-11-26 03:19
0

Mam jeszcze 1 pytanie
Założmy że tworze vector w ktorym jest jakas lista typu string

list<string> lista;
lista.push_back("jeden");
lista.push_back("dwa");
lista.push_back("trzy");
vector<list<string>> wektor;
wektor.push_back(lista);

i teraz kiedy próbuje wypisać zawartość wektora iteratorami

    for (vector<list<string>> ::iterator it = v1.begin(); it != v1.end(); ++it)
    {   
        cout << it->front() << endl;
    }

wypisywany jest tylko 1 element listy czyli w tym przypadku "jeden",i jak zrobić żeby wypisywane były wszystkie elementy które znajdują sie na owej liście? :/

edytowany 1x, ostatnio: Radi175, 2018-11-26 03:20

Pozostało 580 znaków

2018-11-26 09:27
0

Potrzebujesz dodać jeszcze jedną, wewnętrzną pętlę lecącą po liście pokazywanej iteratorem it.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2018-11-27 10:03
0
 for (auto list_ : v1) 
    for (auto el : list_)
        cout << el;

spróbuj tak ;)


edytowany 1x, ostatnio: Tenonymous, 2018-11-27 10:25

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0