Как эффективно считывать данные (одного типа) из строки файла за строкой в ​​несколько векторов (вектор vectros)? - PullRequest
0 голосов
/ 07 января 2019

У меня есть файл с более чем 100 шт. элементов (данные того же типа, например, целые). Каждый элемент находится в другой строке. Структура файла:
int
int
...
int

Я должен прочитать эти данные в 2D массив (вектор из 5 векторов):
- от первой строки к первому вектору
- от второй строки ко второму вектору
....
- с пятой строки на пятый вектор
- шестая строка первого вектора ...

и от начала до конца файла.

std::vector<std::vector<int>> my_v;
std::ifstream in( "data.txt" );
std::string record;

while ( std::getline( in, record ) )
{
    std::istringstream is( record );
    std::vector<int> row( ( std::istream_iterator<int>( is ) ),
                             std::istream_iterator<int>() );
    my_v.push_back( row );
}

for ( const auto &row : my_v )
{
    for ( double x : row ) std::cout << x << ' ';
    std::cout << std::endl;
}        

Теперь я читаю данные в один вектор. Как это исправить?

1 Ответ

0 голосов
/ 07 января 2019

Пример кода, кажется, для несколько другого формата. Я предполагаю, что вы на самом деле не написали этот код сами и не понимаете его. Основываясь на описании и немного здравого смысла, я думаю, что вы ищете это

std::vector<std::vector<int>> my_v(5); // five vectors
std::ifstream in("data.txt");
int value, i = 0;

// read a value
while (in >> value)
{
    // add to the 'i'th vector
    my_v[i].push_back(value);
    // update i
    if (++i == 5)
        i = 0;
}

// print results
for ( const auto &row : my_v )
{
    for ( int x : row ) std::cout << x << ' ';
    std::cout << std::endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...