将函数传递给字符串

时间:2017-04-29 01:32:35

标签: c++ function vector

我目前有一个程序从dat文件中获取数据并形成一个二维向量。现在,我有10个dat文件和10个不同的函数,每个函数都创建一个向量。我想知道如何缩短代码并创建一个函数,通过传递一个带有dat文件名的字符串来创建二维向量。下面我列出了几个功能。

library(xml2)

doc <- read_xml('<div id="post_message_975824" class="alt3">
   <div class="quote">
      some unwanted text 
   </div>
   the text to get <abr>ABR</abr> text to get
</div>')

xml_find_all(doc, ".//div[@class='quote']") %>% xml_remove()

}  代码在这里

1 个答案:

答案 0 :(得分:0)

基本上你这样做

std::vector<std::vector<double> > readDAT(std::string const &path)
{
   std::vector<std::vector<double> > data;

   const int columns = 8;  // pass as a parameter?
   ifstream instream(path, ios::in);

   while( data_good(instream) ) // you don't provide cosmic_data_good
   {
      std::vector<double> line;
      for(int i= 0; i < columns; i++)
      {
         double datum;
         instream >> datum;
         line.push_back(datum);
      }
      data.push_back(line);
   }

   return data;
} 

文件由8个实数的列组成。因此,他们都可以用相同的例程阅读。如果列数不同,您可以将其传入并使列成为变量而不是常量,这只是一个小的变化。你还需要一些检测数据结束的方法,我想这是data_good()函数会做的。

另一个技巧是获取一个打开的istream,并在包装​​函数中打开该文件。然后,您可以从任何源加载.DAT数据,而不仅仅是磁盘文件。

像这样称呼

 vector<vector<double> > cosmic_ray = readDAT("events_comp-h4a_10.00-10000.00PeV_zen37.00.dat");
 vector<vector<double> > IC40_events = readDAT("IC40_exp.dat");

依此类推,适用于所有数据集。