Stringstream не теряет данные при извлечении - PullRequest
0 голосов
/ 08 июня 2019

Я хочу создать файл, в котором будут храниться некоторые цифры, которые затем будут извлечены в массив.

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

//for setw()
#include <iomanip>


std::vector<int> getData()
{
    using namespace std;

    //For the sake of this question simplicity
    //I won't validate the data
    //And the text file will contain these 10 digits:
    //1234567890
    ifstream in_file("altnum.txt");

    //The vector which holds the results extracted from in_file 
    vector<int> out;

    //It looks like C++ doesn't support extracting data 
    //from file to stringstream directly
    //So i have to use a string as a middleman
    stringstream ss;
    string str;

    //Extract digits from the file until there's no more
    while (!in_file.eof())
    {
        /*
            Here, every block of 4 digits is read
            and then stored as one independent element
        */
            int element;
            in_file >> setw(4) >> str;
            cout<<str<<"\n";

            ss << str;
            cout<<ss.str()<<"\n";

            ss >> element;
            cout<<element<<"\n";

            out.push_back(element);
    }

    //Tell me, program, what have you got for my array?
    for (auto &o : out)
        cout << o << ' ';

    in_file.close();
    return out;
}

Когда я запускаю фрагмент кода выше, я получаю следующие числа:

1234 1234 1234

в то время как

1234 5678 90

ожидается.

А потом я обнаружил (направляя каждую переменную на экран), что поток строк ss не освобождает свое содержимое при извлечении в «элемент»

Но почему это? Я думал, что как поток cin, после извлечения поток вытолкнет данные из него? Я что-то упустил чрезвычайно важный?

...