【发布时间】:2016-03-21 14:59:25
【问题描述】:
我正在尝试将一些 ints 从 stdin 复制到 vector。我的代码可以工作,但我不确定为什么在copy 的第二个参数之后需要()。我的意思是istream_iterator<int>() 调用中的istream_iterator<int>() 参数。
代码在这里...
#include <iterator>
#include <vector>
#include <iostream>
using std::vector;
using std::copy;
using std::cin;
using std::istream_iterator;
int main()
{
vector<int> nums;
copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(nums)); // why do I need the empty brackets after the 2nd argument?
return 0;
}
如果我删除括号,我会从编译器中得到一个错误,但是如果我将我的代码稍微修改为下面的代码,我的程序就可以正常工作。
int main()
{
vector<int> nums;
istream_iterator<int> end; // no brackets used here
copy(istream_iterator<int>(cin), end, back_inserter(nums));
return 0;
}
我来自 Java 背景,所以空括号仅表示您使用了空构造函数。第一个代码 sn-p 违背了我的理解,根据我对 C++ 的理解,如果你想使用一个空的构造函数,你只会错过 () 但这里不是这种情况
帮助!
【问题讨论】: