首页 > 后端开发 > C++ > 如何在 C 中有效地将具有不同计数的文本文件中的整数解析为向量?

如何在 C 中有效地将具有不同计数的文本文件中的整数解析为向量?

Patricia Arquette
发布: 2024-10-30 19:54:30
原创
528 人浏览过

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

使用 C ifstream 从文本文件中读取整数

尝试从文本文件中读取图邻接信息时,可能会遇到以不同数量的整数结尾的行'n'。由于整数数量不一致,使用 getline() 方法单独检索每一行给准确解析每一行带来了挑战。人们正在寻求解决这个问题的策略,并将这些值有效地存储在向量中。

传统方法要求迭代 getline() 读取的每一行,并利用 istringstream 对象来解析每一行。当顺序读取整数时,它们可以附加到向量中,然后可以根据需要进一步操作该向量。以下代码举例说明了这种方法:

<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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板