Rumah > pembangunan bahagian belakang > C++ > Apakah Kaedah Terpantas untuk Menghuraikan Terapung Berpisah Ruang dalam C ?

Apakah Kaedah Terpantas untuk Menghuraikan Terapung Berpisah Ruang dalam C ?

Barbara Streisand
Lepaskan: 2024-12-03 10:19:11
asal
518 orang telah melayarinya

What are the Fastest Methods for Parsing Space-Separated Floats in C  ?

Cara Menghuraikan Terapung Berpisah Ruang dalam C dengan Cepat

Menghuraikan terapung yang diasingkan ruang boleh menjadi tugas yang memakan masa, terutamanya apabila berurusan dengan fail besar. Kaedah tradisional seperti menggunakan aliran C standard boleh menjadi perlahan. Artikel ini meneroka beberapa kaedah cekap untuk menghuraikan terapung dalam C .

Boost Spirit

Boost Spirit ialah perpustakaan C berkuasa yang menyediakan keupayaan penghuraian lanjutan. Walaupun keluk pembelajaran awalnya, Spirit menawarkan penghuraian yang pantas dan boleh dipercayai. Begini cara untuk menggunakannya:

#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;
}
Salin selepas log masuk

Fail Dipetakan Memori

Fail dipetakan memori menawarkan cara yang lebih pantas untuk membaca fail ke dalam ingatan tanpa overhed operasi I/O tradisional. Ini boleh mempercepatkan penghuraian dengan ketara:

#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;
}
Salin selepas log masuk

Tanda Aras

Pelbagai kaedah penghuraian telah ditanda aras untuk menunjukkan perbezaan kelajuannya. Boost Spirit muncul sebagai yang terpantas, diikuti dengan pendekatan fail dipetakan memori dan aliran C standard. Prestasi yang tepat mungkin berbeza-beza bergantung pada saiz dan kerumitan data.

Kesimpulan

Menghuraikan terapung yang diasingkan ruang dalam C boleh dioptimumkan menggunakan teknik yang berbeza. Boost Spirit memberikan prestasi tertinggi, tetapi memerlukan lebih pemahaman tentang mekanisme penghuraiannya. Fail yang dipetakan memori menawarkan jalan tengah, mempercepatkan penghuraian sambil mengekalkan kesederhanaan kod. Strim C tradisional kekal sebagai pilihan yang berdaya maju, walaupun lebih perlahan dalam pengiraan.

Atas ialah kandungan terperinci Apakah Kaedah Terpantas untuk Menghuraikan Terapung Berpisah Ruang dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan