Wczytanie liczb z pliku do vectora.

Wczytanie liczb z pliku do vectora.
CH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 128
0

Witam.
Próbuję napisać program, w którym niestety muszę wczytać sporą liczę danych liczbowych z pliku tekstowego. Do tej pory obsługę plików robiłem w czystym C... Czy może mi ktoś pomóc jak napisać taki "mały" programik który będzie mi wczytywał te dane aż do napotkania EOF'a do vektora który będzie int a nie stringiem ( więc z tego co czytałem opcja ze">>" odpada). Chciałem użyć vectora z racji na to że mój finalny program ma wczytywać dane z różnych plików o różnej liczbie liczb (raz może być 100 a raz 1000 itd.) a vector jest "dynamiczny"-jeżeli ktoś ma pomysł na coś innego to również bardzo proszę. ;)
Oto co na razie napisałem:

Kopiuj

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main()
{
    fstream plik;
    vector<int>dane;
    plik.open("stud0.txt",ios::in);
   
 if(plik.good()==false){
        cout<<"Cos poszlo nie tak"<<endl;
    }

    while(!plik.eof()){
       //CHODZI MI O ŚRODEK TEJ PĘTLI
    }
   
    plik.close();
    return 0;
}

Dzięki.

xDevil2
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 109
0

Najłatwiej chyba będzie wczytywanie z pliku linia po lini (getline). Następnie z takiej lini separujesz sobie oddzielnie każdą liczbę (np. bo są oddzielone spacjami, tabulacją etc.) i zapisujesz do go vectora wlaśnie.

Do podzielenia całej linijki tekstu na pojedyncze słowa można użyć istringstream. Przed zapisaniem takiej liczby do vektora musisz ją najpierw zamienieć na inta (z stringa)

Potat0x
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 372
2
Chungu napisał(a):

więc z tego co czytałem opcja ze">>" odpada

Dlaczego odpada?

Kopiuj
    int liczba;
    while(!plik.eof())
    {
        plik>>liczba;
        dane.push_back(liczba);
    }
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
6

Jeśli w pliku są wyłącznie liczby to jest to trywialne:

Kopiuj
std::ifstream f("data.txt");
std::vector<int> data;
std::copy(std::istream_iterator<int>(f),std::istream_iterator<int>(), std::back_inserter(data));
CH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 128
0

Dzięki za wszystkie odpowiedzi. :D Byłem zmęczony - dziś już wszystko mi działa i trochę wstyd za pytanie. :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.