Bagaimana untuk Menghuraikan Integer dengan Cekap daripada Fail Teks dengan Kiraan Berbeza-beza menjadi Vektor dalam C?

Patricia Arquette
Lepaskan: 2024-10-30 19:54:30
asal
495 orang telah melayarinya

How to Efficiently Parse Integers from a Text File with Varying Counts into a Vector in C  ?

Membaca Integer daripada Fail Teks dengan C ifstream

Apabila cuba membaca maklumat bersebelahan graf daripada fail teks, seseorang boleh menemui baris dengan bilangan integer yang berbeza-beza ditamatkan oleh 'n'. Menggunakan kaedah getline() untuk mendapatkan setiap baris secara individu menimbulkan cabaran untuk menghuraikan setiap baris dengan tepat kerana bilangan integernya yang tidak konsisten. Strategi dicari untuk menangani isu ini dan menyimpan nilai ini dengan cekap dalam vektor.

Pendekatan konvensional memerlukan lelaran pada setiap baris yang dibaca oleh getline() dan menggunakan objek istringstream untuk menghuraikan setiap baris. Apabila integer dibaca secara berurutan, ia boleh ditambahkan pada vektor, yang kemudiannya boleh dimanipulasi lagi seperti yang dikehendaki. Kod berikut menunjukkan pendekatan ini:

<code class="cpp">#include <fstream>
#include <sstream>
#include <string>
#include <vector>

int main() {
  std::ifstream infile("thefile.txt");
  std::string line;

  while (std::getline(infile, line)) {
    std::istringstream iss(line);
    int n;
    std::vector<int> v;

    while (iss >> n) {
      v.push_back(n);
    }

    // Do something with v
  }
}</code>
Salin selepas log masuk

Penyelesaian alternatif melibatkan satu baris untuk gelung. Dengan menggunakan kelas istream_iterator, kita boleh membaca nilai terus ke dalam vektor, mengurangkan keperluan untuk bekas perantara. Fungsi tambahan juga digunakan untuk menghalang kemungkinan rujukan berjuntai yang mungkin timbul daripada std::move.

<code class="cpp">#include <fstream>
#include <string>
#include <vector>

int main() {
  std::vector<std::vector<int>> vv;

  for (std::string line;
       std::getline(std::cin, line);
       vv.push_back(std::vector<int>(std::istream_iterator<int>(std::stay(std::istringstream(line))),
                                     std::istream_iterator<int>())
                    )
       ) { }
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menghuraikan Integer dengan Cekap daripada Fail Teks dengan Kiraan Berbeza-beza menjadi Vektor 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