c++ - 从格式化文件创建 std::vector

标签 c++ file vector

我遇到了这段代码:

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

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

3
1 2 3

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

还有这样的“技巧”吗?

最佳答案

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

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

关于c++ - 从格式化文件创建 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35688584/

相关文章:

c++ - 如何在 C++ 中获得整数类型的无符号等价物?

file - 无法从 Linux 内核版本 4.2.3 上的内核模块打开/读取文本文件

c - C语言删除文件中的特定行

r - 在 R 中查找向量中的元素

c++ - 如何在我的操作系统内核中启用 IRQ8?

c++ - 恒定时间 "is bool array all 0' 秒?”

c++ - 无法将参数 1 从 'std::_Vector_iterator<_Myvec>' 转换为 'std::_Vector_iterator<_Myvec>'

c++ - 让用户创建自己的类实例

c++ - 如何将组合的 Asio 操作与 C++20 协程一起使用以返回值?

c - 制作文件以写入来自serialPort的所有信息