Какой самый быстрый способ ввода данных из текстового файла и заполнения им целочисленного вектора 2D? - PullRequest
0 голосов
/ 17 января 2020

У меня есть вектор и файл .txt с числами. В конце каждой строки есть "\ n". Текстовый файл выглядит так:

Example:

2 10 529 680 817 865 406 422 827 517 727 667 
4 8 722 682 965 22 341 65 663 687 
6 6 874 416 903 125 942 746 
8 9 424 269 532 807 319 908 603 308 482 
10 10 631 137 557 115 810 294 85 291 997 153 
12 10 249 346 709 115 492 440 713 132 959 723 
14 9 53 270 996 424 239 480 919 867 660 
16 10 634 463 487 197 23 159 147 393 38 926 

Мне нужен действительно быстрый способ ввода данных и заполнения их вектором, так как я участвую в конкурсе. Вектор после заполнения будет выглядеть следующим образом:

vector<vector<int> > students{
{2, 10, 529, 680, 817, 865, 406, 422, 827, 517, 727, 667 }, 
{4, 8, 722, 682, 965, 22, 341, 65, 663, 687 }, 
{6, 6, 874, 416, 903, 125, 942, 746 }, 
{8, 9, 424, 269, 532, 807, 319, 908, 603, 308, 482 }, 
{10, 10, 631, 137, 557, 115, 810, 294, 85, 291, 997, 153}, 
{12, 10, 249, 346, 709, 115, 492, 440, 713, 132, 959, 723 }, 
{14, 9, 53, 270, 996, 424, 239, 480, 919, 867, 660 }, 
{16, 10, 634, 463, 487, 197, 23, 159, 147, 393, 38, 926}
 };

Я пробовал использовать mmap, но безуспешно ... Заранее спасибо.

PS: Я ладья ie поэтому, пожалуйста, немного понимания, если я не понимаю, что вы говорите.

Редактировать: Это код, который я использую сейчас:


for (i = 0; i < numOfStuds; i++)
{
   fscanf(input, "%d %d ", &grade, &univs);
   students[i].push_back(grade);
   backup.push_back(grade);
   students[i].push_back(univs);
   for (j = 0; j < univs; j++)
   {
      fscanf(input, "%d ", &temp);
      students[i].push_back(temp);
   }

}

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Вы можете просто прочитать каждую строку и назначить временную строку. Затем назначьте массив строк вашим ученикам. Вот мой подход:

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

using namespace std;

int main()
{

    ifstream file;
    file.open("/home/cayirova/Documents/example.txt",ios_base::app);
    string lines;
    vector<vector<int> > students;
    while (getline(file,lines)) {

        string element = "";   
        vector <int> newRow;

        for(int i=0;i<lines.length();i++)
        {
            if(!isspace(lines[i]))
            {
                element += lines[i];
            }
            if(isspace(lines[i]))
            {
               int assigned_element = stoi(element);
               newRow.push_back(assigned_element);
               element = "";
            }

        }

        students.push_back(newRow);

    }

    for(int i=0; i<8;i++)
    {
        for(int j=0;j<students[i].size();j++)
        {
            cout<<students[i][j]<<" ";
        }

        cout<<endl;
    }

    return 0;

}
0 голосов
/ 17 января 2020
#include <vector>
#include<string>
#include<fstream>
#include<iostream>
#include <chrono>

int main(){

    auto t1 = std::chrono::high_resolution_clock::now();
    std::ifstream myFile{"fileName.txt",std::ios::in};
    std::vector<std::string> linesArr;
    std::vector<std::vector<int>> numbersArr;


    while(myFile)
    {
        std::string tempStr;
        std::getline(myFile, tempStr);
        linesArr.push_back(tempStr);
    }


    for(auto & line: linesArr){

        std::vector<int> tempVector;

        for(size_t pos=0; pos<line.size();)
        {   
            size_t tempInt{};
            tempVector.push_back(std::stoi(line.substr(pos), &tempInt));
            pos+=tempInt+1;
        }
        numbersArr.push_back(tempVector);
    }

    auto t2 = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::microseconds>( t2 - t1 ).count();
    std::cout<<"\nelapsed time is: "<<duration<<" mic sec.\n\n";

    //Display your array
    for(auto & vec: numbersArr){

        for(auto& num:vec)    std::cout<<num<<" ";

        std::cout<<"\n";
    }


    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...