2013-07-07 115 views
1

我有以下格式数据的.txt文件:将数据插入载体

1.23,2.34,3.45 
4.56,5.67,6.78 

如何插入数字在向量

vector[1]={1.23,4.56,...} 
vector[2]={2.34,5.67,...} 
vector[3]={3.45,6.78,...} 

代码

ifstream in("data.txt"); 
vector<vector<int> > v; 

if (in) { 
    string line; 
    while (getline(in,line)) { 
     v.push_back(std::vector<int>()); 
     stringstream split(line); 
     int value; 
     while (split >> value) 
      v.back().push_back(value); 
    } 
} 
+6

什么是你不喜欢你的代码?它工作吗? – jrok

+3

当你运行你有的代码时会发生什么?这与你想要的有什么不同? –

+0

您需要创建'std :: vector vv'而不是'v.push_back(std :: vector ());'并将'value'推入到'vv'中。之后,您可以将该矢量'vv'添加到主矢量。但当然,如果这是你的意思。 – MahanGM

回答

0

代码中存在多个问题

  1. 你内在的vector应该是vectorfloatdouble而不是int

  2. value变量也应该floatdouble

  3. 你需要走过去的分隔符(逗号),而读。

  4. 您需要创建尽可能多的内部向量,因为每行都有值。我通过布尔型first变量完成了以下工作 - 我使用它来确保只在读取第一行时创建矢量。

  5. 内部矢量的索引push_backto与被推回的行上的值的列号相同。我使用变量col来确定当前正在读取的列号是什么。

您需要与列数一样多的内部向量。每个内部向量的成员数与文件中的行数一样多。

ifstream in("data.txt"); 
vector<vector<double> > v; 

bool first = false; 
if (in) 
{ 
    string line; 
    while (getline(in,line)) 
    { 
     istringstream split(line); 
     double value; 
     int col = 0; 
     char sep; 

     while (split >> value) 
     { 
      if(!first) 
      { 
       // Each new value read on line 1 should create a new inner vector 
       v.push_back(std::vector<double>()); 
      } 

      v[col].push_back(value); 
      ++col; 

      // read past the separator     
      split>>sep; 
     } 

     // Finished reading line 1 and creating as many inner 
     // vectors as required    
     first = true; 
    } 

}