el siguiente código no se comporta como esperaba. Por favor, ayúdame a entender cómo funciona.algoritmo de copia con ifstream
#include <algorithm>
#include <iterator>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
struct user
{
string name;
string age;
string id;
};
istream& operator>>(istream& is, user& s)
{
getline(is, s.name, ':');
getline(is, s.age, ':');
getline(is, s.id);
return is;
}
int main(int argc, char* argv[])
{
ifstream file("file.txt");
vector<user> vec;
copy(istream_iterator<user>(file), istream_iterator<user>(), back_inserter(vec));
return 0;
}
Mi operadora personalizada >> se llama dos veces, pero yo esperaría que sea llamado una sola vez ya que los contenidos son:
John: cuarenta: 21-5821-0
¿Cómo sabes que se llama dos veces? Check-in depurador? ¿Obtienes dos entradas en el vector? Si es el último, ¿las dos entradas son las mismas? –
+1, tuvo el mismo problema recientemente ... por alguna razón, el incremento del iterador en el código 'copy' estaba causando la lectura, en lugar de la desreferenciación, por lo que realiza una lectura demasiada. Dicho esto, su 'operador >>' necesita verificar el estado después de las dos primeras operaciones 'getline'! –
No tiene sentido preocuparse por el código de E/S que no verifica los valores devueltos. Debe * siempre * verificar los valores de retorno de las operaciones de E/S. –