【问题标题】:Create an std::vector from a formatted file从格式化文件创建 std::vector
【发布时间】:2016-02-28 21:35:34
【问题描述】:

我遇到了这段代码:

ifstream file ("data.in");
std::vector<int> v;
file >> v;

这对于看起来像这样的文件有效:

3
1 2 3

向量将包含元素 1、2 和 3。这究竟是如何工作的,或者为什么?到目前为止,我并没有经常使用 std::vector(主要是因为我在大学里唯一一次使用 C++ 是在数据结构课上,我们必须编写自己的结构版本),但乍一看它没有看起来应该可以。

还有像这样的“技巧”吗?

【问题讨论】:

  • 某人在某处为std::istreamstd::vector 超载了operator&gt;&gt;。您发布的代码不完整...
  • 我现在感觉自己像个白痴。甚至没有想到检查头文件,我对此感到太兴奋了。非常感谢!

标签: c++ file vector


【解决方案1】:

它通过为ifstreamvector 重载&gt;&gt; 运算符来工作。它可能看起来像这样:

template <typename Char, typename Traits, typename T>
std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& is, std::vector<T>& v)
{
    std::size_t s;
    if (!(is >> s))
        return is;
    v.resize(s);
    for (auto& i : v)
    {
        is >> i;
    }
    return is;
}

【讨论】:

  • 正如@LogicStuff 在他的评论中所说。你确实是对的,我发帖前没有检查头文件。
猜你喜欢
  • 2018-08-16
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
相关资源
最近更新 更多