C++ 使用 std 从文件读取

标签 c++ std

我正在尝试从文件中读取,并且我知道该怎么做:

#include <iostream>
#include <iterator>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
    std::string filename = "data.txt";
    std::ifstream from(filename);
    std::vector<int> values((std::istream_iterator<int>(from)), std::istream_iterator<int>());
    return 0;
}

我的问题是如何以功能方式做同样的事情:

int fromfile(std::string filename, std::vector<int> &values)
{
... 
    return 0;
}

原生方式不起作用:

int fromfile(std::string filename, std::vector<int> &values)
{
    std::ifstream from(filename);
    values((std::istream_iterator<int>(from)), std::istream_iterator<int>());
    return 0;

}

最佳答案

您的函数式方式不起作用,因为您尝试在已构造的对象上使用构造函数 - 所以看起来您正在尝试在 上调用 operator() vector ,它不存在。然而,vector 确实有一个 assign执行相同操作的成员函数,无需额外的括号:

int fromfile(std::string filename, std::vector<int> &values)
{
    std::ifstream from(filename);
    values.assign(std::istream_iterator<int>(from), std::istream_iterator<int>());
    return 0;
}

尽管真正的函数方式可能如下所示 (C++11) - 使用该函数返回 vector :

std::vector<int> fromfile(std::string filename)
{
    std::ifstream from(filename)
    return {std::istream_iterator<int>(from), std::istream_iterator<int>{}};
}

如果您只有 return 0,那么返回 int 就有点无用了...

关于C++ 使用 std 从文件读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32358220/

相关文章:

c++ - 减少 Visual Studio 程序大小

c++ - 不能将 std::string 设置为等于另一个 std::string 的第零个索引

c++ - 读取格式不正确的文件时应该抛出什么类型的 std::exception?

c++ - 如何在 C++ 中打乱对象 vector

c++ - stdlib.h 中的 rand 有多糟糕?

C++ 标准库容器相对于所包含对象的线程安全性

c++ - 没有 PDB 的符号函数

c++ - 检查我的头文件中的命令行选项

c++ - 在模板中设置默认比较类型

c++ - 模板参数推导失败