c++使用std从文件中读取

C++ reading from file using std

本文关键字:读取 文件 使用 std c++      更新时间:2023-10-16

我正在尝试从文件中读取,我知道如何做到这一点:

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

您的函数方式不起作用,因为您试图在已经构造的对象上使用构造函数-因此看起来您试图在不存在的vector上调用operator()。然而,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返回是无用的…

尽管Barry已经给出了答案,但是另一种方法是调用std::copy:

std::copy(std::istream_iterator<int>(from), std::istream_iterator<int>(),
          std::back_inserter(values));