スペースで区切られた float の解析は、特に大きなファイルを扱う場合、時間のかかる作業になる可能性があります。標準の C ストリームを使用するような従来の方法は時間がかかる可能性があります。この記事では、C で float を解析するための効率的な方法をいくつか取り上げます。
Boost Spirit は、高度な解析機能を提供する強力な C ライブラリです。最初の学習には時間がかかりますが、Spirit は高速で信頼性の高い解析を提供します。使用方法は次のとおりです。
#include <boost/spirit/include/qi.hpp> namespace qi = boost::spirit::qi; int main() { std::string line = "134.32 3545.87 3425"; double x, y, z; auto it = line.begin(); bool success = qi::phrase_parse(it, line.end(), qi::double_ >> qi::double_ >> qi::double_, qi::blank, data); if (success) { std::cout << "Parsed values: " << x << " " << y << " " << z << std::endl; } return 0; }
メモリ マップ ファイルは、従来の I/O 操作のオーバーヘッドを発生させずに、ファイルをメモリに読み取る高速な方法を提供します。これにより、解析が大幅に高速化されます。
#include <iostream> #include <fstream> #include <sys/stat.h> #include <sys/mman.h> int main() { std::ifstream file("data.txt"); struct stat statbuf; fstat(file.fileno(), &statbuf); // Memory-map the file char* data = static_cast<char*>(mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED, file.fileno(), 0)); // Iterate through the data to parse floats for (char* ptr = data; ptr < data + statbuf.st_size;) { double x, y, z; ptr = std::sscanf(ptr, "%f %f %f", &x, &y, &z); // Parse the float values and perform desired operations } // Unmap the file munmap(data, statbuf.st_size); return 0; }
速度の違いを示すために、さまざまな解析方法がベンチマークされています。 Boost Spirit が最も高速なものとして浮上し、メモリ マップド ファイル アプローチと標準 C ストリームがそれに続きました。正確なパフォーマンスは、データのサイズと複雑さによって異なる場合があります。
C でのスペース区切りの float の解析は、さまざまな手法を使用して最適化できます。 Boost Spirit は最高のパフォーマンスを提供しますが、その解析メカニズムについてさらに理解する必要があります。メモリ マップ ファイルは中間点を提供し、コードの単純さを維持しながら解析を高速化します。従来の C ストリームは依然として実行可能なオプションですが、計算は遅くなります。
以上がC でスペースで区切られた Float を解析する最速の方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。