我正在尝试复制一些 ints
来自stdin
进入vector
。我的代码可以工作,但我不确定为什么我需要 ()
在 copy
的第二个参数之后。我的意思是 istream_iterator<int>()
copy
中的参数打电话。
代码在这里...
#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 背景,因此空括号仅意味着您使用了空构造函数。第一个代码片段与我所理解的相反,根据我对 C++ 的理解,如果你想使用空构造函数,你就会错过 ()
但这里的情况并非如此
救命啊!
最佳答案
线路
copy(istream_iterator<int>(cin), istream_iterator<int>, back_inserter(nums));
没有意义。 istream_iterator<int>
是类型而不是对象。您需要使用()
创建类型为 istream_iterator<int>
的未命名、临时、默认构造的对象.
使用
istream_iterator<int> end;
您声明一个 istream_iterator<int>
类型的对象,并且您不需要括号,因为它是默认构造的,没有括号。事实上,如果您使用了括号,例如:
istream_iterator<int> end();
那么你就会遇到 most vexing parse问题和end
现在将是一个不执行任何操作并返回 istream_iterator<int>
的函数。 .
关于c++ - 使用 std::copy 时 istream_iterator 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36134503/