如何将文件读取为矢量<矢量<double>>?

How to read file as vector<vector<double>>?

本文关键字:lt gt double 矢量 文件 读取      更新时间:2023-10-16

我有这样的数据

4.0 0.8
4.1 0.7
4.4 1.1
3.9 1.2
4.0 1.0

我已经写好了我的程序

#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main() {
vector<double> v;
ifstream in("primer.dat");
double word;
while(in >> word)
v.push_back(word);
for(int i = 0; i < v.size(); i++)
cout << v[i] << endl;
}

但现在我已经意识到,在我的代码进一步计算,我需要的数据为(vector <vector> double) .I宁愿不重塑向量。有可能将数据读取为向量的向量吗?

试试下面的

#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <sstream>
#include <string>
int main()
{
    std::vector<std::vector<double>> v;
    std::ifstream in( "primer.dat" );
    std::string record;
    while ( std::getline( in, record ) )
    {
        std::istringstream is( record );
        std::vector<double> row( ( std::istream_iterator<double>( is ) ),
                                 std::istream_iterator<double>() );
        v.push_back( row );
    }
    for ( const auto &row : v )
    {
        for ( double x : row ) std::cout << x << ' ';
        std::cout << std::endl;
    }        
}    

不确定我是否完全理解你的意思,但如果我这样做,这段代码应该工作得很好,然后:

#include <string>
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
using namespace std;
std::vector<std::string> split(const std::string& str, char sep)
    {
        std::vector<std::string> result;
        std::istringstream iss(str);
        std::string sub;
        while (std::getline(iss, sub, sep))
            result.push_back(sub);
        return result;
    }
int main() {
    vector<vector<double> >  completeVector ;
    ifstream in("primer.dat");
    string word;
    while(in >> word){
        std::vector<std::string> splitS = split(word, ' ');
        std::vector<double> line ;
        for(int i = 0 ; i < splitS.size() ; i++){
            line.push_back(stod(splitS[i]));
        }
        completeVector.push_back(line);
    }
// For printing out the result
    for(int i = 0 ; i < completeVector.size() ; i++){
        std::vector<double> tmp = completeVector[i];
        for(int j = 0 ; j < tmp.size() ; j++){
            std::cout << tmp[j] << std::endl ;
        }
     }  
}

它编译肯定,它应该有你正在寻找的行为。如果没有,请在评论中告诉我。

#include <string>
#include <sstream>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main() {
  vector<vector<double>> v;
  ifstream in("primer.dat");
  string line;
  while(std::getline(in, line))
  {
    v.push_back(vector<double>());
    stringstream ss(line);
    double word;
    while(ss >> word)
    {
      v.back().push_back(word);
    }
  }
  for(int i = 0; i < v.size(); i++)
  {
    for(int j = 0; j < v[i].size(); j++)
    {
      cout << v[i][j] << ' ';
    }
    cout << endl;
  }
}