用更快的方法替换这些方法

时间:2013-04-13 08:46:20

标签: c++ boost

这个问题实际上是我发布的a previous question的更新。根据用户意见,我意识到我需要对代码进行分析,因此我通过Vtune Amp对我的代码的第一部分进行了分析。我得到以下语句,与其他方法相比消耗大量时间

Source Line Source                                                                        CPU Time by Utilization   Overhead Time   Spin Time
double high_val =  atof(temp[2].c_str());                                                                           
std::string s( (std::istreambuf_iterator<char>(&buffer)), std::istreambuf_iterator<char>());            
boost::split( temp, lines[i], boost::is_any_of(",") );                                              

在上面的代码缓冲区是: boost::asio::streambuf buffer;

有关上述更换功能的任何建议吗?

1 个答案:

答案 0 :(得分:3)

尝试Boost.Sprit进行所有解析任务。如果你有很多规则,它可能会消耗更多的编译时资源,但在运行时会很快。

第一行:

#include <boost/spirit/include/qi.hpp>
std::string::iterator begin = temp.begin() + 2;
std::string::iterator end = input.end();
float high_val;
boost::spirit::qi::parse(begin, end, boost::spirit::float_, high_val);

最后一行:

std::vector<std::string>;
// '%' is a list parser
boost::spirit::qi::parse(buffer.data(), buffer.data() + buffer.size(), *(char_ - ',') % ',', lines);

最有可能的是,可以为你的所有任务创建一个简单的语法,但我不知道你正在解析什么,所以我只是试图或多或少地匹配你的上述代码。