读取多列并将它们放在c ++中的vector中

时间:2016-08-28 23:24:11

标签: c++ c++11

我有一个包含15列和1000多行值的文件。

45285785.00 45285797.00 45285776.00 45285795.00 45285785.00 45285803.00 45285769.00 45285773.00 45285771.00 45285795.00 45285771.00 45285798.00 45285796.00 45285797.00 45285753.00
35497405.00 35497437.00 35497423.00 35497465.00 35497463.00 35497468.00 35497437.00 35497481.00 35497417.00 35497479.00 35497469.00 35497454.00 35497442.00 35497467.00 35497482.00
46598490.00 46598483.00 46598460.00 46598505.00 46598481.00 46598480.00 46598477.00 46598485.00 46598494.00 46598478.00 46598482.00 46598495.00 46598491.00 46598491.00 46598476.00

我想读这个文件。我现在正在做的方法是采用15个变量然后将它们分别放入向量中。

double col1, col2, ... , col15;
vector <double> C1, C2, ..., C15;
ifstream input('file');
while(input >> col1 >> col2 >> ... >> col15)
{
    C1.push_back(col1);
    C2.push_back(col2);
    ...
    C15.push_back(col15);
}

有更好的方法吗?我的意思是没有定义15个变量,在while循环中读取15列?

3 个答案:

答案 0 :(得分:3)

是的,有。

您可以考虑所有cols的容器,例如vector<double> cols(15)并使用向量向量替换C1, C2 ... C15变量。然后你可以很容易地做到:

for(int i=0; i<cols.size(); ++i) {
    input >> cols[i];
    C[i].push_back(cols[i]);
}

但是在这种情况下,你不知道何时停止阅读。要解决此问题,您可以使用input.eof()input.good()方法,或尝试捕获fstream >>运算符的返回值,就像在代码中一样。

答案 1 :(得分:0)

是的,有比现在更好的方式。

您需要声明double类型的二维向量。

vector<vector<double> > C;

for(int i = 0; i < cols.size(); i++) {
    input >> cols[i];
    C[i].push_back(cols[i]);
}

答案 2 :(得分:0)

另一个&#34;向量或向量&#34;基于示例(在这种情况下......矢量数组)。

使用while(这样您可以检查input >> val结果)而不是for

#include <array>
#include <vector>
#include <fstream>


int main ()
 {
   double val;

   std::array<std::vector<double>, 15> C;

   std::ifstream input("file");

   std::size_t  ind { 0 };

   while ( input >> val )
    {
      C[ind++].push_back(val);

      if ( ind == C.size() )
         ind = 0U;
    }

   if ( ind != 0U )
      ; // do something ?

   return 0;
 }