Come leggere gruppi di numeri interi da un file, riga per riga in C ++

Ho un file di testo con su ogni riga uno o più interi, separati da uno spazio. Come posso leggere in modo elegante questo con C ++? Se non mi importasse delle linee potrei usare cin >>, ma conta su quale riga siano gli interi.

Esempio di input:

1213 153 15 155 84 866 89 48 12 12 12 58 12 

Dipende se vuoi farlo in base alla riga o come set completo. Per l’intero file in un vettore di numeri interi:

 int main() { std::vector v( std::istream_iterator(std::cin), std::istream_iterator() ); } 

Se vuoi gestire una linea per linea:

 int main() { std::string line; std::vector< std::vector > all_integers; while ( getline( std::cin, line ) ) { std::istringstream is( line ); all_integers.push_back( std::vector( std::istream_iterator(is), std::istream_iterator() ) ); } } 

Potresti fare smtng come questo (ho usato cin, ma puoi usare qualsiasi altro stream di file):

 string line; while( getline( cin, line ) ) { istringstream iss( line ); int number; while( iss >> number ) do_smtng_with_number(); } 

O:

 int number; while( cin >> number ) { do_smtng_with_number(); } 

Che risultato vuoi? Se vuoi tutti gli interi in un singolo vettore, puoi fare qualcosa come:

 std::ifstream input("input.txt"); std::vector data(std::istream_iterator(input), std::istream_iterator()); 

Tuttavia, ciò elimina la struttura della linea: si finisce con i dati tutti insieme. Un modo semplice per mantenere la struttura della linea originale è leggere una riga con getline, inizializzare un stringing con quella stringa, quindi inserire i valori da tale stringing in un vettore (e spingerlo sul retro di un vettore di vettori di int).

 std::vector > data; std::vector temp; std::string t; while (std::getline(input, t)) { std::istringstream in(t); std::copy(std::istream_iterator(in), std::istream_iterator(), std::back_inserter(temp); data.push_back(temp); } 

Ecco qui :

 void readFromFile(string filename) { string line; ifstream myfile(filename); if (myfile.is_open()) { while ( getline(myfile,line) ) { cout << line << '\n'; } myfile.close(); } } int main(int argc, char* argv) { readFromFile("Input.txt"); getchar(); return 0; }