我正在尝试从文件中读取,并且我知道该怎么做:
#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/