我使用istream_iterator
从我的文件中插入内容。我也使用std::copy
算法。为什么不推导模板参数?
因此,我们知道istream_iterator
接受一个流作为参数:
std::istream_iterator<int> it = file;
我可以通过流,但为什么在这里不工作?
#include <fstream>
#include <vector>
int main()
{
std::ifstream infile("in.txt");
std::vector<int> v;
std::copy(infile, std::istream_iterator<int>(), std::back_inserter(v));
}
我必须做这样的:
std::copy(std::istream_iterator<int>(infile), std::istream_iterator<int>(), std::back_inserter(v));
但是这看起来很详细,我觉得自己是一个更好的方式做我在做什么...
@juanchopanza'infile',但我做了一个错字。 – user2030677
对函数模板的调用不执行参数的隐式用户定义转换。 'std :: copy'是一个函数模板,而stream-to-iterator是用户定义的转换。 –
这是使用迭代器代替范围的C++标准库的许多缺点之一。现在大家都知道,但现在已经有很多代码很难改变。 –