Cómo leer grupos de enteros desde un archivo, línea por línea en C ++

Tengo un archivo de texto con cada línea uno o más enteros, separados por un espacio. ¿Cómo puedo leer de manera elegante esto con C ++? Si no me interesan las líneas, podría usar cin >>, pero importa qué línea son enteros.

Ejemplo de entrada:

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

Depende de si desea hacerlo línea por línea o como un conjunto completo. Para todo el archivo en un vector de enteros:

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

Si quieres tratar en una línea por línea:

 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() ) ); } } 

Podrías hacer smtng así (utilicé cin, pero puedes usar cualquier otra secuencia de archivos):

 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(); } 

¿Qué resultado quieres? Si quieres todos los enteros en un solo vector, puedes hacer algo como:

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

Sin embargo, eso descarta la estructura de línea: terminas con todos los datos juntos. Una manera fácil de mantener la estructura de línea original es leer una línea con getline, inicializar un stringstream con esa cadena, luego poner los valores de ese stringstream en un vector (y empujar eso en la parte posterior de un vector de vectores de 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); } 

Aqui tienes :

 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; }