2013-07-07 62 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; 
    } 

}