首頁 >後端開發 >C++ >如何在 C 中有效地將具有不同計數的文字檔案中的整數解析為向量?

如何在 C 中有效地將具有不同計數的文字檔案中的整數解析為向量?

Patricia Arquette
Patricia Arquette原創
2024-10-30 19:54:30528瀏覽

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

使用C ifstream 從文字檔案中讀取整數

嘗試從文字檔案中讀取圖鄰接資訊時,可能會遇到以不同數量的整數結尾的行'n'。由於整數數量不一致,使用 getline() 方法單獨檢索每一行為準確解析每一行帶來了挑戰。人們正在尋求解決這個問題的策略,並將這些值有效地儲存在向量中。

傳統方法要求迭代 getline() 讀取的每一行,並利用 i​​stringstream 物件來解析每一行。當順序讀取整數時,它們可以附加到向量中,然後可以根據需要進一步操作該向量。以下程式碼舉例說明了這種方法:

<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>

另一個解決方案涉及單行 for 迴圈。透過利用 istream_iterator 類,我們可以將值直接讀取到向量中,從而減少對中間容器的需求。也使用了輔助函數來防止 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>

以上是如何在 C 中有效地將具有不同計數的文字檔案中的整數解析為向量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn