sortowanie tablicy wczytanej z pliku

0

Cześć,
w skrócie program ma za zadanie wczytać z pliku kilka liczb ( ilość nie jest z góry ustalona ), następnie posortować te liczby oraz posortowane zapisać do nowego pliku.
plik.h

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

class Liczby
{
    vector <Liczby> tab;
public:
    Liczby();
    void wczytanie(Liczby &);
    void sortowanie(Liczby &);
    void zapisanie(Liczby &);
    friend istream & operator>>(istream &, Liczby &);
    friend ostream &operator<<(ostream &, Liczby &);
    ~Liczby();
};

plik.cpp

#include <iostream>
#include <fstream>
#include "liczby.h"
#include <vector>
#include <algorithm>
using namespace std;

Liczby::Liczby() {};
istream & operator >>(istream &wejscie, Liczby &l)
{
    for(int i=0;i<l.tab.size();i++)
        wejscie >> l.tab[i];
    return wejscie;
}
ostream & operator <<(ostream &wyjscie, Liczby &l)
{
    for(int i=0;i<l.tab.size();i++)
        return wyjscie<<l.tab[i]<<" ";
}
void Liczby::wczytanie(Liczby &l)
{
    fstream plik;
    plik.open("liczby.txt");
    if (plik.is_open())
    {
        plik>>l;
    }
    plik.close();
}
void Liczby::sortowanie(Liczby &l)
{
    sort(l.tab.begin(), l.tab.end());
}
void Liczby::wypisz(Liczby &l)
{
    for(int i=0;i<l.tab.size();i++)
        cout<<l.tab[i]<<" ";
}
void Liczby::zapisanie(Liczby &l)
{
    fstream plik;
    plik.open("zapis.txt");
    if (plik.is_open())
    {
        plik<<l;
    }
    plik.close();
}

Liczby::~Liczby() {};

przy kompilacji wyskakują nast błędy:
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\predefined_ops.h|43|error: no match for 'operator<' (operand types are 'Liczby' and 'Liczby')|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\predefined_ops.h|71|error: no match for 'operator<' (operand types are 'Liczby' and 'Liczby')|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\predefined_ops.h|55|error: no match for 'operator<' (operand types are 'Liczby' and 'Liczby')|

byłbym bardzo wdzięczny za jakąkolwiek pomoc

1

vector <Liczby> tab; zmień na vector <int> tab;.

0

po zmianie na <int> program się zaczyna poprawnie kompilować

fragment pliku main:
Liczby liczby;
liczby.wczytanie(liczby);
liczby.sortowanie(liczby);
liczby.wypisz(liczby);
liczby.zapisanie(liczby);

plik txt który wczytuję zawiera losowe liczby całkowite oddzielone od siebie spacją

po uruchomieniu programu na konsoli się nic nie wyświetla, ponadto plik do którego zapisuje tą tablicę pozostaje pusty, prawdopodobnie problem jest przy wczytywaniu danych, są może jakieś pomysły jak można to rozwiązać?

EDIT:

  1. Za pomocą funkcji resize zmieniłem rozmiar tablicy na 7 i teraz odczyt z pliku działa poprawnie, wolałbym uniknąć takiej opcji i wczytywać dane w sposób dynamiczny, w jaki sposób moge sprawdzić ile w danym pliku jest liczb?
  2. Pomimo zmiany rozwiaru tablicy funkcja zapisz zapisuje do pliku tylko pierwsza wartość tablicy
1

Czemu Liczby::wczytanie(Liczby &)? Wczytujesz do wektora w tym obiekcie więc nie musisz go przekazywać do metody. Wystarczy Liczby::wczytanie() lub Liczby::wczytanie(fstream &).
Wczytanie do wektora np. tak:

int l;
while(plik >> l)
  tab.push_back(l);
0

zmodyfikowałem funkcje wczytaj zgodnie z radą

void Liczby::wczytanie()
{
    fstream plik;
    plik.open("liczby.txt");
    int i, l;
    i=0;
    if (plik.is_open())
    {
        while(plik>>l)
        {
        tab.push_back(l);
        i++;
    }
tab.resize(i);
}
    plik.close();
}

nadal pozostaje jednak problem z zapisem do pliku, program wpisuje tylko pierwszy element tablicy

0

ok udało mi się to załatwić

jeżeli kogoś interesowałoby rozwiązanie to wystarczyła drobna zmiana w operatorze <<

ostream & operator <<(ostream &wyjscie, Liczby &l)
{
    for(int i=0;i<l.tab.size();i++)
         wyjscie<<l.tab[i]<<" ";
    return wyjscie;
}

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