【问题标题】:How to write vector values to a file如何将向量值写入文件
【发布时间】:2018-09-03 20:34:11
【问题描述】:

我有一个大向量。

我使用的方式极大地增加了程序的运行时间。第一个是将所有值写入字符串,因为它们是使用stringstreams 计算的,然后将字符串写入文件。另一种方法是在事后制作一个长字符串并将其写入文件。但是,这两个都非常慢。

有没有办法用换行符立即将向量的值写入文本文件?

【问题讨论】:

  • "有没有办法直接将向量的值写入文本文件而无需换行?" - 你需要换行还是不换行??
  • 很高兴看到我的程序在 5 分钟内完成了以前需要 3 小时的工作 XD

标签: c++ vector


【解决方案1】:

使用std::ofstreamstd::ostream_iteratorstd::copy() 是执行此操作的常用方法。这是一个使用 C++98 语法的 std::strings 示例(该问题在 C++11 之前提出):

#include <fstream>
#include <iterator>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> example;
    example.push_back("this");
    example.push_back("is");
    example.push_back("a");
    example.push_back("test");

    std::ofstream output_file("./example.txt");
    std::ostream_iterator<std::string> output_iterator(output_file, "\n");
    std::copy(example.begin(), example.end(), output_iterator);
}

【讨论】:

  • 您应该小心使用字符串作为示例。因为加载字符串向量的反面是不同的(它是唯一输出/输入不同的标准类型)。
  • 你写“这个问题是在 C++11 之前提出的”——C++11 还有其他方法可以做到这一点吗?
【解决方案2】:

假设你有 C++11:

#include <fstream>
#include <vector>
#include <string>

int main()
{
    std::vector<std::string> v{ "one", "two", "three" };
    std::ofstream outFile("my_file.txt");
    // the important part
    for (const auto &e : v) outFile << e << "\n";
}

【讨论】:

  • 如果要将浮点数据向量的整行向量写入二进制文件怎么办?
【解决方案3】:

也许我错过了什么,但有什么问题:

std::ofstream f("somefile.txt");
for(vector<X>::const_iterator i = v.begin(); i != v.end(); ++i) {
    f << *i << '\n';
}

这避免了必须进行潜在的二次字符串连接,我认为这会扼杀你的运行时间。

【讨论】:

  • 对不起,v和X代表什么?
  • v 是您的包含向量。 X 是其中包含的类型。
【解决方案4】:

您可以使用std::copystd::ostream_iterator

【讨论】:

    猜你喜欢
    • 2023-01-24
    • 2020-12-17
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2013-03-26
    • 2021-03-20
    • 2013-04-29
    相关资源
    最近更新 更多